Siete sulla strada giusta. L'unica cosa che manca è il concetto di immondizia . collezione il programma fa infatti creare oggetti Integer infiniti ma dopo il 1 ° iterazione, l'oggetto creato nella precedente iterazione diventa idoneo per GC
Considerate questo:.
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.
Se si desidera visualizzare l'errore OutOfMemoryError è necessario assicurarsi in qualche modo che vi sia un modo per raggiungere gli oggetti creati nel ciclo infinito. Così si può fare qualcosa di simile:
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.
}
}
}
In questo programma gli oggetti interi sono creati infinitamente come prima, ma ora li ho aggiungere un vettore in modo da assicurarsi che ci sia un modo per arrivare a loro e non diventano GC ammissibili .
+1 ma io userei una lista poiché Vector è old-hat (sicronizzato/non una raccolta ecc.) –
@ Brian potresti elaborare? Il vettore è una lista e una collezione. –
Mi dispiace, il mio errore è re. il business Raccolta/Elenco. Le operazioni di Vector sono tutte sincronizzate. Vedi http://stackoverflow.com/questions/1792134/a-colleague-said-dont-use-java-util-vector-anymore-why-not –