如何模拟Out of memory:请求的数组大小超过VM限制

DKS*_*ore 10 java jvm out-of-memory

我使用了太阳网站Out Of Memory帮助.引用的地方

内存不足:请求的阵列大小超过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];
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的机器上

javac *.java;java -Xmx256m JavaTest
Run Code Online (Sandbox Code Playgroud)

但上面的线正在生产

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)

aku*_*uhn 22

为了我

long[] l = new long[Integer.MAX_VALUE];
Run Code Online (Sandbox Code Playgroud)

产量 Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit

 

PS:如果你需要为了测试而产生异常,你也可以throw new OutOfMemoryError("Requested array size exceeds VM limit")自己.

  • 我也不知道,但是`Integer.MAX_VALUE`应该是一个安全的测试猜测(我假设你需要激发测试),不是吗?*(实际上如果你需要它进行测试,你可以自己抛出异常,对吧?)* (2认同)