Weak link not collecting garbage?

I studied Weak links. And I realized that all weak links will garbage until OutOfMemoryError occurs. I had a simple test something like this (I know that catching OOME is not good, but just a test):

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());
}

I was expecting a NULL value to be printed because a weak SHOULD reference was received, but I always get output 10.

Please let me know where I am going wrong. Maybe I misunderstood the concept of weak links?

+3
source share
1 answer

weakReferenceItself will not become zero ... how could he? However, his goal may become zero.

I suspect you mean:

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");
    }
}
+10

All Articles