我正在研究弱引用。而且我知道所有弱引用都会在 OutOfMemoryError 发生之前被垃圾收集。我有一个类似这样的简单测试(我知道捕捉 OOME 并不好,但只是一个测试):
Integer weakInt = new Integer(10);
WeakReference<Integer> weakReference = new WeakReference<Integer>(weakInt);
try {
while (weakReference != null) {
String[] generateOutOfMemoryStr = new String[999999999];
}
}
catch (OutOfMemoryError oome) {
System.out.println(weakReference.get());
}
我希望打印空值,因为应该已经收集了弱引用,但我总是得到 10 的输出。
请让我知道我哪里出错了。可能我对弱引用的概念理解错了吗?