我想出了以下方法。我收到stackoverflow错误。有更快的方法吗?
static void looper(){
long a = 0;
a++;
System.out.println(a);
looper();
}
答案 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 。