java.lang.OutOfMemoryError:超出了GC开销限制我在一个程序中得到这个错误,该程序创建了几个(几十万个)HashMap对象,每个对象带有几个(15-20)个文本条目。在提交到数据库之前,必须收集这些字符串(不会分解成较小的数量)。根据Sun的说法,如果在垃圾收集中花费了太多时间,则会发生错误:如果超过98%的总时间花在垃圾收集上并且不到2%的堆被恢复,则会抛出OutOfMemoryError。 ”。显然,可以使用命令行将参数传递给JVM通过“-Xmx1024m”(或更多)增加堆大小,或通过“-XX:-UseGCOverheadLimit”完全禁用错误检查。第一种方法工作正常,第二种方法在另一个java.lang.OutOfMemoryError中结束,这次是关于堆的。所以,问题:对于特定的用例(即几个小的HashMap对象),是否有任何编程替代方案?例如,如果我使用HashMap clear()方法,问题就会消失,但HashMap中存储的数据也会消失!:-)StackOverflow中的相关主题也讨论了该问题。
3 回答
![?](http://img1.sycdn.imooc.com/5458632800010f8802200220-100-100.jpg)
有只小跳蛙
TA贡献1824条经验 获得超8个赞
你基本上没有内存来顺利运行这个过程。想到的选项:
像你提到的那样指定更多的内存,在
-Xmx512m
第一个之间尝试一下HashMap
如果可能,使用较小批次的对象进行处理如果你有很多重复的字符串,请
String.intern()
在将它们放入之前使用它们HashMap
使用
HashMap(int initialCapacity, float loadFactor)
构造函数来调整您的案例
添加回答
举报
0/150
提交
取消