class Test { public static void main(String...args) { while(true) { Integer i = new Integer(); } } }
你走在正确的轨道上.你唯一缺少的是垃圾收集的概念.该程序实际上创建了无限的Integer对象,但在第一次迭代之后,在上一次迭代中创建的对象符合GC的条件.
考虑一下:
Integer i; i = new Integer(); // 1. create new object and make reference variable i refer to it. i = new Integer(); // 2. create another object and make reference variable i refer to it...there is no way to get to the object created in step1 so obj in step 1 is eligible for GC.
如果你想看到OutOfMemoryError,你需要somhow确保有一种方法来获取在无限循环中创建的对象.所以你可以这样做:
class Test { public static void main(String...args) { Vector v = new Vector(); // create a new vector. while(true) { v.addElement(new Integer(1)); // create a new Integer and add it to vector. } } }
在这个程序中,Integer对象像以前一样无限创建,但现在我将它们添加到向量中,因此请确保有一种方法可以获取它们并且它们不会成为GC符合条件的.
翻译自:https://stackoverflow.com/questions/2261465/java-outofmemoryerror-not-throwing