RFR: JDK-8202788: Explicitly reclaim cached thread-local direct buffers at thread exit

Peter Levart peter.levart at gmail.com
Sat May 12 10:44:06 UTC 2018


Hi,

On 05/11/18 16:13, Alan Bateman wrote:
> On 08/05/2018 16:07, Tony Printezis wrote:
>> Hi all,
>>
>> Following the discussion on this a few weeks ago, here’s the first 
>> version
>> of the change:
>>
>> http://cr.openjdk.java.net/~tonyp/8202788/webrev.0/
>>
>> I think the consensus was that it’d be easier if the exit hooks were 
>> only
>> available within java.base. Is it enough that I added the 
>> functionality to
>> the jdk.internal.misc package? (And is jdk.internal.misc the best 
>> place for
>> this?)
>>
>> I’ll also add a test for the new functionality. But let’s first come up
>> with an approach that everyone is happy with. :-)
>>
> Peter's approach in early April was clean (and we should come to the 
> getIfPresent discussion) but it adds a field to Thread for the 
> callback list. If I read your approach correctly, you are avoiding 
> that by maintaining an array of hooks in ThreadLocalExitHooks.
>
> Another approach to try is a java.base-internal ThreadLocal that 
> defines a method to be invoked when a thread terminates. Something 
> like the following:
>    http://cr.openjdk.java.net/~alanb/8202788/webrev/index.html
>
> -Alan

 From the API perspective, Alan's suggestion is the most attractive one 
as it puts the method to where it belongs - into the ThreadLocal 
instance. But the implementation could be improved a bit. I don't like 
the necessity to iterate over all ThreadLocal(s) to filter out 
JdkThreadLocal(s). There might be a situation where there's plenty of 
ThreadLocal(s) registered per exiting thread which would produce a spike 
in CPU processing at thread exit.

The way to avoid this would be to maintain a separate linked list of 
entries that contains just those with JdkThreadLocal(s). Like in this 
modification of Alan's patch, for example:

http://cr.openjdk.java.net/~plevart/jdk-dev/DBBCache_Cleanup/webrev.01/

(Only ThreadLocal class is modified from Alan's patch)

What do you think?


Regards, Peter



More information about the core-libs-dev mailing list