stephCurry
V2EX  ›  Java

慢速循环造成 gc exceeded limit, Outofmemory

  •  
  •   stephCurry · May 31, 2020 · 1988 views
    This topic created in 2188 days ago, the information mentioned may be changed or developed.

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

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

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

    arrow8899
        1
    arrow8899  
       May 31, 2020
    不能在循环内部写入 mysql 吗? List json 存入 mysql 是什么操作,存的字符串吗
    stephCurry
        2
    stephCurry  
    OP
       May 31, 2020
    @arrow8899 mysql 版本低,不支持 json,计划将 List 转 json 字符串存入后存入
    skypyb
        3
    skypyb  
       Jun 1, 2020
    直接写文件呗,循环完读文件到 mysql 里去
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   931 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:50 · PVG 04:50 · LAX 13:50 · JFK 16:50
    ♥ Do have faith in what you're doing.