首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stephCurry
V2EX  ›  Java

慢速循环造成 gc exceeded limit, Outofmemory

  •  
  •   stephCurry · 41 天前 · 558 次点击
    这是一个创建于 41 天前的主题,其中的信息可能已经有所发展或是发生改变。

    程序中由于是检测文件,所以每次调用检测方法耗时很长,且由于多个文件,检测方法又在循环里并返回结果添加至 List 中,并将 List json 串存入 mysql 。因 list 对象在慢速循环中一直被占用,导致 GC 无法回收,所以直接造成 gc overhead exceeded limit,Outofmemory 异常,解决方式肯定不能直接粗暴地增加 heap size,想法是以 IO 或 Jvm 外部 RAM 换取 heap 被长时间占用的空间。

    初步想法是不用 list 接受检测函数的返回值,检测函数检测后直接将结果存入 redis 或者 mongodb,当整个循环结束后再次查询相关数据,一次性直接存入 mysql 。

    大家有什么较优的推荐吗?

    arrow8899
        1
    arrow8899   41 天前
    不能在循环内部写入 mysql 吗? List json 存入 mysql 是什么操作,存的字符串吗
    stephCurry
        2
    stephCurry   41 天前
    @arrow8899 mysql 版本低,不支持 json,计划将 List 转 json 字符串存入后存入
    skypyb
        3
    skypyb   41 天前
    直接写文件呗,循环完读文件到 mysql 里去
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2322 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 17ms · UTC 02:22 · PVG 10:22 · LAX 19:22 · JFK 22:22
    ♥ Do have faith in what you're doing.