Sunday 15 March 2015

java - Understanding Phantom reference vs weak reference with respect to Reference queue -



java - Understanding Phantom reference vs weak reference with respect to Reference queue -

as per link https://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html, phantomreferences enqueued when object physically removed memory , weakreferences enqueued before finalization or garbage collection has happened.

the difference in when enqueuing happens. weakreferences enqueued object point becomes weakly reachable. before finalization or garbage collection has happened; in theory object "resurrected" unorthodox finalize() method, weakreference remain dead. phantomreferences enqueued when object physically removed memory, , get() method returns null prevent beingness able "resurrect" almost-dead object.

whereas per http://www.ibm.com/developerworks/library/j-refs/, phantomreference added referencequeue before heap object freed , , weakreferences added referencequeue after finalization or garbage collection.

unlike soft , weak references, phantomreference added referencequeue before heap object freed. (remember, phantomreference objects must created associated referencequeue.) allows action taken before heap object reclaimed.

when heap object's finalize() method run , memory freed, weakreference object added referencequeue, if exists.

i confused. 1 correct?

basically want know difference between weak , phantom reference respect reference queue?

as far can tell, 2 quoted texts saying same thing. both correct.

if doesn't help you, please exactly why think there contradiction here.

basically want know difference between weak , phantom reference respect reference queue?

the texts quoted explain clearly, reiterate you.

in case of weakreference, reference enqueued when garbage collector detects referenced object weakly referenced; i.e. when detects there no strong referenced object. @ point, object still exists, , referencequeue still able access referenced object via reference.get() method.

in case of phantomreference, reference enqueued when garbage collector deletes referenced object. @ point, referenced object has ceased exist, , reference.get() method homecoming null.

as can see, there clear difference in way 2 reference objects enqueued.

note also, there multiple reference queues, , queue (if any) on reference gets enqueued depends on constructor argument.

java garbage-collection weak-references soft-references phantom-reference

No comments:

Post a Comment