java.lang.OutOfMemoryError:超出了GC开销限制
我在一个程序中得到这个错误,该程序创建了几个(几十万个)HashMap对象,每个对象带有几个(15-20)个文本条目。在提交到数据库之前,必须收集这些字符串(不会分解成较小的数量)。
根据Sun的说法,如果在垃圾收集中花费了太多时间,则会发生错误:如果超过98%的总时间花在垃圾收集上并且不到2%的堆被恢复,则会抛出OutOfMemoryError。 ”。
显然,可以使用命令行将参数传递给JVM
通过“-Xmx1024m”(或更多)增加堆大小,或
通过“-XX:-UseGCOverheadLimit”完全禁用错误检查。
第一种方法工作正常,第二种方法在另一个java.lang.OutOfMemoryError中结束,这次是关于堆的。
所以,问题:对于特定的用例(即几个小的HashMap对象),是否有任何编程替代方案?例如,如果我使用HashMap clear()方法,问题就会消失,但HashMap中存储的数据也会消失!:-)
StackOverflow中的相关主题也讨论了该问题。
有只小跳蛙
相关分类