java.lang.OutOfMemoryError:超出了GC开销限制
我在一个程序中创建了这个错误,该程序创建了几个(数十万)HashMap对象,每个对象都有几个(15-20)文本条目。这些字符串必须全部收集(不分解成较小的数量),然后再提交给数据库。
根据Sun的说法,该错误发生“如果在垃圾回收上花费了太多时间:如果在垃圾回收上花费了总时间的98%以上,而回收不到2%的堆,则将引发OutOfMemoryError。 ”。
显然,可以使用命令行将参数传递给JVM,以用于
- 通过“ -Xmx1024m”(或更多)增加堆大小,或
- 通过“ -XX:-UseGCOverheadLimit”完全禁用错误检查。
第一种方法工作正常,第二种方法出现在另一个java.lang.OutOfMemoryError中,这一次是关于堆的。
因此,问题是:对于特定的用例(例如,几个小的HashMap对象),是否有任何编程替代方法?例如,如果我使用HashMap clear()方法,问题就会消失,但是存储在HashMap中的数据也会消失!
回答:
本质上,你的内存不足以平稳地运行该过程。想到的选项:
- 指定更多的内存就像你提到的,尝试像之间的东西
-Xmx512m
第一 HashMap
如果可能,处理少量对象以一次处理- 如果你有很多重复的字符串,
String.intern()
请先将其使用,然后再将其放入HashMap
- 使用
HashMap(int initialCapacity, float loadFactor)
构造函数针对你的情况进行调整
以上是 java.lang.OutOfMemoryError:超出了GC开销限制 的全部内容, 来源链接: utcz.com/qa/404748.html