弱参照について勉強していました。そして、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());
}
弱い参照が収集されている必要があるため、null が出力されることを期待していましたが、常に 10 の出力が得られます。
どこが間違っているのか教えてください。弱い参照の概念が間違っていると理解できましたか?