现在开发的机能中有一部分的上传功能,会通过csv上传大概3w-4w的数据。
这些数据会经过很多的check,所以每一条数据会申请一个treeMap用来记录错误信息。
在测试中出现了内存溢出的问题,但是不会经常出现,只是偶尔发生。
检查了程序,觉得不是程序逻辑的问题,最终只能怀疑是new TreeMap 这个动作被执行了3w次产生的问题。
因为程序中的check比较复杂,大概将近3k的代码都是用来处理check的,所以尝试了将TreeMap的定义拿到最外层几乎是不可行的,除非重新设计那一块的逻辑,但在时间上不允许。
所以请问这种问题有没有解决的办法?
PS:最终返回的List中,会存放所有之前new的Map,用来在画面显示处理结果(如果有错误,不更新错误的,将错误信息显示,但是没错的仍然要正常的更新...),这导致了没有办法在最后清空这个map
Java中创建了大量的TreeMap(30000个)左右,导致内存溢出,如何解决?
答案:2 悬赏:40 手机版
解决时间 2021-02-11 16:56
- 提问者网友:像風在裏
- 2021-02-10 18:50
最佳答案
- 五星知识达人网友:不甚了了
- 2021-02-10 18:56
时间换空间。
不同的CSV行之间是否有关系?
如果所有行都没有关系则比较简单,每批读N行,比如500行,处理完后再读下500行。
如果需要按某个CSV列进行分组,则每次只处理一个分组。先读出一行,然后根据某列的值读相同分组的行,不是相同分组的行直接丢弃不在内存中缓存,处理完这个分组后,记录下这些行(只需记录行号)已被处理。然后处理下一个分组。
不同的CSV行之间是否有关系?
如果所有行都没有关系则比较简单,每批读N行,比如500行,处理完后再读下500行。
如果需要按某个CSV列进行分组,则每次只处理一个分组。先读出一行,然后根据某列的值读相同分组的行,不是相同分组的行直接丢弃不在内存中缓存,处理完这个分组后,记录下这些行(只需记录行号)已被处理。然后处理下一个分组。
全部回答
- 1楼网友:玩世
- 2021-02-10 19:34
既然是记录错误信息就应该把treeMap写到文件里,然后手动销毁对象
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯