Hi Martin,

On 05/17/2016 05:19 AM, Martin Buchholz wrote:
I have some evidence that an object's finalize method can run while a
weak reference pointing to it is not yet cleared, which surprised me.

E.g.
class F { protected void finalize() { assert wref.get() != this; } }
static WeakReference wref = new WeakReference(new F());

If this is a bug, I can try to give y'all a repro recipe.
If not, we should fix the docs
"""When the weak references to a weakly-reachable object are cleared,
the object becomes eligible for finalization."""

(It's also quite possible I made a mistake diagnosing this)

What can happen with above code is that you get a NPE from dereferencing wref in finlailze(). In case NPE is not thrown and the program constructs only a single instance of F then assert should succeed.

It is possible that you made a mistake. Can you post the real code?

Regards, Peter

Reply via email to