Вы на правильном пути. Единственное, чего вам не хватает, так это концепции сбора мусора. Программа действительно создает бесконечные целочисленные объекты, но после 1-й итерации объект, созданный на предыдущей итерации, становится пригодным для 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, вам нужно как-то убедиться, что есть способ добраться до объектов, созданных в бесконечном цикле. Таким образом, вы можете сделать что-то вроде:
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.
}
}
}
В этой программе целочисленные объекты создаются бесконечно, как и раньше, но теперь я добавляю их к вектору, чтобы убедиться, что есть способ добраться до них, и они не получают GC.