慢速循环造成 gc exceeded limit, Outofmemory

2020-05-31 20:38:45 +08:00
 stephCurry

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

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

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

1437 次点击
所在节点    Java
3 条回复
arrow8899
2020-05-31 21:57:25 +08:00
不能在循环内部写入 mysql 吗? List json 存入 mysql 是什么操作,存的字符串吗
stephCurry
2020-05-31 22:42:49 +08:00
@arrow8899 mysql 版本低,不支持 json,计划将 List 转 json 字符串存入后存入
skypyb
2020-06-01 07:36:50 +08:00
直接写文件呗,循环完读文件到 mysql 里去

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/677272

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX