On 03/22/2016 10:28 PM, Kim Barrett wrote:
On Mar 22, 2016, at 5:24 AM, Per Liden <per.li...@oracle.com> wrote:
One thing I like about this approach is that it's only the ReferenceHandler 
thread that pops of elements from the pending list and enqueues them. That 
simplifies things a lot.
I like that too.  And hopefully we really can get rid of sun.misc.Cleaner 
(under whatever name).

 From a GC perspective I would however like to get away from the shared pending 
list and the pending list lock entirety and instead provide a VM downcall to 
get the pending list. The goal would of course be to have a more robust way of 
transferring the pending list to Java land, instead of today's secret handshake 
which is easy to get wrong. Also, not requiring the pending list lock (which is 
a Java monitor) to be held during a GC would also simplify things a lot on the 
GC side. E.g. the ReferencePendingListLockerThread could be removed completely.
I’ve been thinking along the same lines.  I think having the pending list (and 
associated locking and notification) in Java is just making life difficult for 
ourselves, and that things could be much simpler if that whole protocol was 
owned by the VM.

Once the reference handler thread has obtained the latest list, if it then 
wants to publish that list for other Java threads to help process, that’s a 
policy choice that can be explored on the Java side, with no impact on the VM 
(including the GC).


If the only blocking/waiting of ReferenceHandler thread was performed by native code, could it simply ignore Java thread interrupts? If this is possible, then the problems of InterruptedException allocation and consequent OutOfMemoryError(s) just disappear.

Regards, Peter

Reply via email to