我有一个 java 模拟器,需要处理大量数据。它工作得很好,但是我得到了一系列int[100000][100][2]
与其他大阵列一起。程序说内存不足。 (Java.lang.outOfMemoryError
)
一切都很好,我只是给了它更多的内存,但它似乎总是用完大约 300M,即使我允许它 2GB。这都是来自观看任务管理器。
我的系统有问题吗,或者这只是我需要处理的java问题?
@丹尼尔普莱登
操作系统:Win 7 32Bit 4GB 内存
JVM命令:java -Xmx2048M -Xms2048M模拟器
错误数据:必须从 IDE 获取(使用 IntelliJ)。我不知道如何从 cmd 执行此操作。我想这就是您正在寻找的。
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at Simulator.main(Simulator.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
您可能会遇到堆碎片问题。即使设置了-Xmx2GB,上面的整数数组也需要一个块连续的记忆。我建议还固定最小堆大小,例如 -Xms2GB。当然,由于操作系统开销、其他进程等原因,这要求您的计算机实际上有远高于 2GB 的内存。
或者,您可以重新访问您的数据结构,看看您是否真的需要这样一个连续的块。以某种方式分解它可能会减少对大的连续内存块的需求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)