0

我想在亚马逊云中使用 java 对大文件进行性能测试。

任务是将一种文件格式转换为另一种格式并写入输出文件

java.lang.OutOfMemoryError: Requested array size exceeds VM limit in eclipse

当我尝试在 Amazon 实例中使用 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

任何人都可以提出更好的解决方案来解决这个问题吗?

4

1 回答 1

0

看起来这不是堆大小的问题,但您只需尝试分配索引大于 2^31-1 (Integer.MAX_VALUE) 的数组。您可以尝试使用数组以外的其他结构吗?或者也许尝试对文件进行分区?

如果您的堆大小小于 32 GB 并且您使用的是 64 位 jvm,则另一个选项是使用 -XX:+UseCompressedOops。它将指针的大小从 64 位减少到 32 位。

于 2018-03-08T15:13:39.313 回答