我使用了Out Of Memory help from sun's site。引用的地方
内存不足:请求的阵列大小超过VM限制
这表示应用程序尝试分配大于堆大小的数组。对于 例如,如果应用程序尝试分配512MB的数组但最大堆大小为256MB, 那么这个错误就会被抛出。在大多数情况下,问题可能是堆大小太大 小或导致应用程序尝试创建大小计算到的数组的错误 不正确的。
我试图通过
来模拟这个import java.util.ArrayList;
import java.util.List;
public class JavaTest {
public static void main(String[] args){
long[] ll = new long[64*1024*1024];
}
}
在我的机器上
javac *.java;java -Xmx256m JavaTest
但上面一行正在制作
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at JavaTest.main(JavaTest.java:7)
我错过了什么?
更新 我的java版本是
$java -version java version "1.6.0_15" Java(TM) SE Runtime Environment (build 1.6.0_15-b03) Java HotSpot(TM) Server VM (build 14.1-b02, mixed mode)
答案 0 :(得分:21)
对我来说
long[] l = new long[Integer.MAX_VALUE];
收益Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
PS:如果你需要为了测试而产生异常,你也可以throw new OutOfMemoryError("Requested array size exceeds VM limit")
自己。
答案 1 :(得分:1)
数组被分配为连续堆空间,并且由于对象分配和垃圾收集,内存可能会碎片化。由于缺少用于分配阵列的固体内存块而发生内存不足错误。您是否使用-Xmx标志显式发送了JVM内存?
答案 2 :(得分:0)
尝试分配一个ArrayList,并将其大小运行时间加倍。
答案 3 :(得分:0)
只是看一下人们使用java本机接口,C ++应用程序之间的桥梁时,人们就会遇到问题。
运行纯Java应用程序时,标准过程似乎是分配一个数组,计算从数组减速中传递的大小变量所需的字节,抛出java.lang.OutOfMemoryError: Java heap space
异常。
当在JVM外部创建数组时,它看起来会生成另一个异常。我确信这种不同的行为有一些技术原因。
您可以尝试复制此人在此other forum上描述的问题。