While trying out some examples with WeakReferences,I just came across the below scenario. I am creating a hashmap and filled it with a weak reference on Employee object.Now I have two strong references, employee & weakReference . I have made both to null in the try block.Invoking the gc explicity, I get finally block run.
So after the gc run ,it is supposed to collect the weakReference object in the heap ,as there is no strong reference to it,But when I print the map it still has the key pointing to the old weakReference object.How is this possible?
Employee employee = new Employee(11);
WeakReference<Employee>weakReference=new WeakReference<Employee>(employee);
Map map = new HashMap<WeakReference<Employee>, String>();
map.put(weakReference, "Test");
System.out.println(map);
try {
employee = null;
weakReference=null;
System.gc();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("Inside finally");
}
System.out.println(map);
And the ouput is
{java.lang.ref.WeakReference@659e0bfd=Test}
Inside finally
{java.lang.ref.WeakReference@659e0bfd=Test}