【发布时间】:2012-02-15 02:00:22
【问题描述】:
我有这个需要处理大量数据的 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)
【问题讨论】:
-
在运行 java 时是否使用 -Xmx2GB 标志来指定更大的堆大小?
-
你'允许'怎么办?用-Xmx?那应该可以。
-
我使用 -Xmx2048M -Xms2048M 从 cmd 运行
-
@PetroSemeniuk:泛型不适用于基元,但基元数组不是基元。
List<int[100][2]>是完全合法的。也就是说,ArrayList不会比数组更好,因为它分配了一个连续的数组作为其后备存储。 -
@Daniel:是的,关于泛型中的基元数组,您是对的——这是可能的。但是,我认为 ArrayList 会起作用,因为它将是引用数组([][] 数组仍然可以存在于不同的内存块中)。不需要连续的内存块(虽然我可能是错的)
标签: java out-of-memory