我正在运行多线程导入,该导入运行大约 1-2 小时。 并在导入中,在将数据放入表中之前。 我正在检查
if(debug.isEnabled())
logger.debug("Object="+MyObject);
其中 MyObject
在 toString
方法中使用 ToStringBuilder
。
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOfRange(Arrays.java:2694)
at java.lang.String.<init>(String.java:203)
at java.lang.StringBuffer.toString(StringBuffer.java:561)
at org.apache.commons.lang3.builder.ToStringBuilder.toString(ToStringBuilder.java:1063)
我认为 toStringBuilder 导致了这个问题。我对么?如果是的话,有什么方法可以解决这个问题?
最佳答案
不一定。所有这些错误都意味着堆空间即将耗尽,并且垃圾收集器正在放弃尝试回收空间 because it has run too much without reclaiming enough space 。事实上,它发生在代码中的那个位置并不一定意味着什么。可能是完全不同的东西占用了空间,但该调用再次启动了 GC,最终放弃了。您需要进行堆转储并在分析器中查看它,例如 YourKit或VisualVM看看到底发生了什么。
关于java - toStringBuilder 导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15081736/