Está en el camino correcto. Lo único que se echa en falta es el concepto de basura . el programa hace colección de hecho crear objetos Integer infinitas pero después de la primera iteración, el objeto creado en la iteración anterior se convierte en elegible para GC
considere esto:.
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.
Si desea ver OutOfMemoryError, debe asegurarse de que hay una forma de llegar a los objetos creados en el bucle infinito. Así que usted puede hacer algo como:
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.
}
}
}
En este programa objetos Integer se crean infinitamente como antes, pero ahora los añadir a un vector de modo a asegurar que hay una manera de llegar a ellos y no ser elegible GC .
+1 pero yo usaría una lista porque Vector es old-hat (sychronised/not a Collection etc.) –
@Brian ¿podría explicarlo? Vector es una lista y una colección. –
Lo siento, mi error re. el negocio de Colección/Lista. Las operaciones de Vector están todas sincronizadas. Consulte http://stackoverflow.com/questions/1792134/a-colleague-said-dont-use-java-util-vector-anymore-why-not –