我正在评估一个相当复杂的算法中来自文本文件的不同数据。
如果文本文件包含超过数据点(最低要求大约是130万个数据点),将会出现以下错误:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.regex.Matcher.<init>(Unknown Source)
at java.util.regex.Pattern.matcher(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at java.util.Scanner.processFloatToken(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
当我在Eclipse中使用以下设置运行时,安装的jre6(标准VM):
-Xms20m -Xmx1024m -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:NewSize=10m
-XX:MaxNewSize=10m -XX:SurvivorRatio=6 -XX:TargetSurvivorRatio=80
-XX:+CMSClassUnloadingEnabled
请注意,如果我只运行部分文本文件,它可以正常工作。
现在我已经阅读了很多关于这个主题的内容,似乎我必须要么有数据泄漏,要么是我在数组中存储了太多数据(我认为是这样)。
现在我的问题是:我该如何解决这个问题?是否可以更改设置以便我仍然可以执行计算,还是我真的需要更多的计算能力?