RFR: 8156500: deadlock provoked by new stress test com/sun/jdi/OomDebugTest.java

Peter Levart peter.levart at gmail.com
Wed Jun 29 13:30:08 UTC 2016


Hi Kim,


On 06/29/2016 01:22 PM, Peter Levart wrote:
> Transfering the whole list in one JNI invocation has the potential for 
> further optimizations on the Java side (like handling the whole popped 
> list privately without additional synchronization - if we ever find a 
> way for java.nio.Bits to wait for it reliably - or even enqueue-ing a 
> chunk of consecutive references destined for the same queue using a 
> single synchronized action on the queue, etc...) 

Just to show what I mean, here's a simple optimization that doesn't use 
a private pendingList of references shared among callers of 
tryHandlePanding(true/false), but instead uses course-grained 
synchronization and waiting for tryHandlePanding(false) callers while 
ReferenceHandler is privately processing the whole list of pending 
references:

http://cr.openjdk.java.net/~plevart/misc/PendingReferenceHandling/webrev.02/

This further improves benchmark results and it still passes the 
DirectBufferAllocTest:

Original JDK 9:

Benchmark                                (refCount)  Mode  Cnt 
Score      Error  Units
ReferenceEnqueueBench.dequeueReferences      100000    ss  100 38410.515 
± 1011.769  us/op

Patched (by Kim):

Benchmark                                (refCount)  Mode  Cnt 
Score      Error  Units
ReferenceEnqueueBench.dequeueReferences      100000    ss  100 42197.522 
± 1161.451  us/op

Proposed (by Peter, webrev):

Benchmark                                (refCount)  Mode  Cnt 
Score      Error  Units
ReferenceEnqueueBench.dequeueReferences      100000    ss  100 34134.977 
± 1274.753  us/op

Proposed (by Peter, webrev.02):

Benchmark                                (refCount)  Mode  Cnt 
Score      Error  Units
ReferenceEnqueueBench.dequeueReferences      100000    ss  100 27935.929 
± 1128.678  us/op


Regards, Peter



More information about the core-libs-dev mailing list