[jmm-dev] finalization

Hans Boehm boehm at acm.org
Fri Aug 15 01:38:16 UTC 2014


On Thu, Aug 14, 2014 at 5:22 PM, Doug Lea <dl at cs.oswego.edu> wrote:

> On 08/13/2014 07:11 PM, Hans Boehm wrote:
>
>
>> You're suggesting that if a method accesses an @Finalized field (including
>> passing it to other methods), then all reference variables in that method
>> are
>>  kept around until the end of their scope?
>>
>
> I'm suggesting something slightly simpler. A reachabilityFence(x)
> is placed/checked after each access of @Finalized field x.r.
> No other JLS changes.
>


I don't think that keeping it live until just after the access is good
enough.  I will typically retrieve the @Finalized field (which might be a
long holding a native pointer), and then later pass the value, now in a
local variable or a temporary, to a routine f() that consumes the result
(e.g. by dereferencing the native pointer).  I need to defer finalization
until f() finishes.  I think the only really safe place to do that is at
the end of x's scope and before any subsequent assignment to x.  This gets
a bit messy if the reference is actually to x.y.z.r.  But all of this is
probably still OK.  In the worst case, I do no dead variable elimination in
functions that reference @Finalized fields, which seems quite tolerable in
terms of performance.  It does have compiler impact, but I doubt that's
avoidable.


More information about the jmm-dev mailing list