Тестирование WeakReference

Каков правильный подход к тестированию слабой ссылки в Java?

Моя первоначальная идея состоит в том, чтобы сделать следующее:

public class WeakReferenceTest {

    public class Target{
        private String value;    

        public Target(String value){
            this.value = value;
        }    
        public String toString(){
            return value;
        }
    }

    public class UsesWeakReference{    
        WeakReference<Target> reference;   

        public UsesWeakReference(Target test){
            reference = new WeakReference<Target>(test);
        }    
        public String call(){
            Target test = reference.get();
            if(test != null){
                return test.toString();
            }
            return "empty";
        }
    }

    @Test
    public void testWeakReference(){    
        Target target = new Target("42");

        UsesWeakReference usesWeakReference = new UsesWeakReference(target);    
        WeakReference<Target> triggerReference = new WeakReference<Target>(target);    
        assertEquals("42", usesWeakReference.call());

        target = null;    
        while(triggerReference.get() != null){
            System.gc();
        }

        assertEquals("empty", usesWeakReference.call());    
    }    
}

Оговорка, которую я имею относительно подхода, заключается в использовании System.gc(), так как я понимаю, что он может вести себя по-разному на разных JVM.

8
задан GhostCat says Reinstate Monica 26 July 2017 в 12:17
поделиться