我想在亚马逊云中使用java对大文件进行性能测试。
任务是将一种文件格式转换为另一种文件格式并编写输出文件
java.lang.OutOfMemoryError: Requested array size exceeds VM limit in eclipse
当我尝试在亚马逊实例的eclipse中使用java运行大型700 MB文件时,我遇到了上述异常,其中RAM大小为32 GB ....
在运行570 MB文件之前我没有例外,运行600 MB文件后触发了异常。
一些谷歌搜索告诉解决方案增加VM的堆大小,我也尝试过, 我的堆大小设置为
-Xms4G -Xmx12G -XX:-UseGCOverheadLimit -XX:+UseG1GC
我将最大尺寸设置为12 GB ..但我仍然得到这个
的例外java.lang.OutOfMemoryError: Requested array size exceeds VM limit
有人可以提出更好的解决方案来解决这个问题吗?
答案 0 :(得分:0)
这似乎不是堆大小的问题,但您只是尝试分配索引大于2 ^ 31-1(Integer.MAX_VALUE)的数组。你能尝试使用除阵列之外的其他结构吗?或者也许尝试对文件进行分区?
另一种选择是使用-XX:+ UseCompressedOops,如果您的堆大小小于32 GB并且您使用的是64位jvm。它会将指针的大小从64位减少到32位。