weakReference
само не станет нулевым ... как это могло?Однако, его target может стать нулевым.
Я подозреваю, что вы имеете в виду:
while (weakReference.get() != null) {
Более того, я подозреваю, что если вы сами не установите для weakInt
значение null, тоЛокальная переменная предотвратит сбор мусора для объекта Integer
.
Более того, , я подозреваю, вы обнаружите, что ваш цикл все же не закончится - потому что выВполне возможно, что требуется больше памяти, чем может быть выделено, даже если Integer
является сборщиком мусора.
Вот программа, которая демонстрирует ее работу, по крайней мере, на моем компьютере:
import java.lang.ref.*;
public class Test {
public static void main(String[] args) {
Integer weakInt = new Integer(10);
WeakReference<Integer> weakReference = new WeakReference<Integer>(weakInt);
weakInt = null;
while (weakReference.get() != null) {
System.out.println("Looping...");
String[] generateOutOfMemoryStr = new String[999999];
}
System.out.println("Weak reference collected");
}
}