填充堆空间之前Java崩溃

Ada*_*one 2 java out-of-memory

我有这个需要处理大量数据的java模拟器.它工作正常,但我得到了一个int[100000][100][2]与其他大数组一起的数组.该程序说它的内存不足.(Java.lang.outOfMemoryError)

一切都很好,我只是给它更多的记忆,但它似乎总是在约300M左右耗尽即使我允许它2GB.这一切都来自观看任务经理.

我的系统有什么问题,或者这只是我需要处理的java事情?

@DanielPryden

操作系统: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)
Run Code Online (Sandbox Code Playgroud)

bre*_*ttw 5

您可能遇到堆碎片问题.即使您设置-Xmx2GB,上面的整数数组也需要块连续内存.我建议也固定最小堆大小,例如-Xms2GB.这当然要求您的机器实际上远远超过2GB,因为操作系统开销,其他进程等.

或者,您可能会重新访问您的数据结构,看看您是否真的需要这样一个连续的块.以某种方式将其分解可能会减少对大型连续内存块的需求.