Я изучал слабые ссылки. И я понял, что все слабые ссылки БУДУТ собирать мусор до того, как произойдет 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.
Пожалуйста, дайте мне знать, где я ошибаюсь. Может быть, я неправильно понял концепцию слабых ссылок?