消耗内存最快的方法

时间:2016-02-09 11:27:16

标签: java

我想出了以下方法。我收到stackoverflow错误。有更快的方法吗?

static void looper(){
        long a = 0;
        a++;
        System.out.println(a);
        looper();
    } 

1 个答案:

答案 0 :(得分:1)

获得OutOfMemoryError的快捷方式是:

final int[] memoryGrave = new int[Integer.MAX_VALUE];
  

线程“main”中的异常java.lang.OutOfMemoryError:请求的数组大小超过VM限制

(您可以在此问题中找到有关最大数组大小的更多信息:Do Java arrays have a maximum size?

但是这个可能不是你想要的,因为JVM可能检查所请求的数组大小并在实际耗尽之前抛出错误内存。
但是你可以稍微改变一下代码,“正确地”做到这一点:

final List<int[]> memoryGrave = new ArrayList<>();
while(true) {
    memoryGrave.add(new int[Integer.MAX_VALUE - 5]);
}
  

线程“main”中的异常java.lang.OutOfMemoryError:Java堆空间

但是,如果这是“最快的方式”来获得该错误(并且实际上内存不足)仍然可以讨论。

当您将上述代码包装到try/finally中时,您可以测量抛出该错误所需的时间:

long start = System.currentTimeMillis();
try {
    final List<int[]> memoryGrave = new ArrayList<>();
    while (true) {
        memoryGrave.add(new int[Integer.MAX_VALUE - 5]);
    }
} finally {
    System.out.println(System.currentTimeMillis() - start);
}

在我的机器上需要大约 30 ms