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

慢速循环造成 gc exceeded limit, Outofmemory

  •  
  •   stephCurry · 2020-05-31 20:38:45 +08:00 · 1369 次点击
    这是一个创建于 1425 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    arrow8899
        1
    arrow8899  
       2020-05-31 21:57:25 +08:00
    不能在循环内部写入 mysql 吗? List json 存入 mysql 是什么操作,存的字符串吗
    stephCurry
        2
    stephCurry  
    OP
       2020-05-31 22:42:49 +08:00
    @arrow8899 mysql 版本低,不支持 json,计划将 List 转 json 字符串存入后存入
    skypyb
        3
    skypyb  
       2020-06-01 07:36:50 +08:00
    直接写文件呗,循环完读文件到 mysql 里去
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1141 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:51 · PVG 02:51 · LAX 11:51 · JFK 14:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.