On Mon, 26 May 2025 17:16:02 GMT, Alan Bateman <al...@openjdk.org> wrote:

> A ForkJoinPool can be created with worker threads that clear thread locals 
> between tasks, thus avoiding a build up of thread locals left behind by tasks 
> executed in the pool. The common pool does this. Erasing thread locals (by 
> writing null to Thread.threadLocals) grinds with thread locals that keep 
> native memory alive, esp. when there isn't a Cleaner or other means to free 
> the memory.
> 
> For the JDK, this is currently an issue for the NIO direct buffer cache. If a 
> task running on a thread in the common pool does socket or network channel 
> I/O then it can leak when the task terminates. Prior to JDK 24 each buffer in 
> the cache had a cleaner, as if allocated by ByteBuffer.allocateDirect, so it 
> had some chance of being released. The changes in 
> [JDK-8344882](https://bugs.openjdk.org/browse/JDK-8344882) mean there is no 
> longer is cleaner for buffers in the cache.
> 
> The options in the short term are to restore the cleaner, register a clearer 
> for the buffer cache, have the FJP resetThreadLocals special case 
> "terminating thread locals", or move the terminating thread locals to a 
> different TL map. Viktor Klang, Doug Lea, and I discussed this topic recently 
> and agreed the best short term approach is to split the map. As terminating 
> thread locals are for platform threads then the map can be in the 
> Thread.FieldHolder and avoid adding another field to Thread. Medium to long 
> term require further thought in this area, including seeing what might be 
> useful (and safe) to expose.
> 
> Testing 1-5. Performance testing ongoing.

This pull request has now been integrated.

Changeset: ac9af69e
Author:    Alan Bateman <al...@openjdk.org>
URL:       
https://git.openjdk.org/jdk/commit/ac9af69eee9636ff98c2b60224964e518aebb421
Stats:     149 lines in 9 files changed: 89 ins; 37 del; 23 mod

8357637: Native resources cached in thread locals not released when FJP common 
pool threads clears thread locals

Reviewed-by: vklang

-------------

PR: https://git.openjdk.org/jdk/pull/25457

Reply via email to