Thread Locals (was Re: State of Loom)

Remi Forax forax at univ-mlv.fr
Thu Jun 4 15:25:56 UTC 2020


----- Mail original -----
> De: "Douglas Surber" <douglas.surber at oracle.com>
> À: "loom-dev" <loom-dev at openjdk.java.net>
> Envoyé: Jeudi 4 Juin 2020 16:58:40
> Objet: Re: Thread Locals (was Re: State of Loom)

> One more datapoint on ThreadLocal. I was crawling through a .jfr this morning
> and found this.
> 
>> ThreadLocal$ThreadLocalMap$Entry
>> java.lang.ThreadLocal$ThreadLocalMap.getEntry(ThreadLocal) (JIT Compiled)	4
>>    ThreadLocal$ThreadLocalMap$Entry
>>    java.lang.ThreadLocal$ThreadLocalMap.access$000(ThreadLocal$ThreadLocalMap,
>>    ThreadLocal) (JIT Compiled)	4
>>    Object java.lang.ThreadLocal.get() (JIT Compiled)	4
>>    ByteBuffer sun.nio.ch.Util.getTemporaryDirectBuffer(int) (JIT Compiled)	4
>>    int sun.nio.ch.IOUtil.read(FileDescriptor, ByteBuffer, long, NativeDispatcher)
>>    (JIT Compiled)	4
>>    int sun.nio.ch.SocketChannelImpl.read(ByteBuffer) (JIT Compiled)	4
>> 
> 
> Putting a ThreadLocal.get inside SocketChannel.read is surprising and given the
> condemnation of ThreadLocals in this forum, probably suboptimal.

Loom is using a carrier thread local (a threadlocal that uses only carrier threads)
https://github.com/openjdk/loom/blob/76adbcf0dee92cdb7e1deca01a3e63309bd1a2f9/src/java.base/share/classes/sun/nio/ch/Util.java#L233

> 
> For what it's worth.
> 
> Douglas

Rémi


More information about the loom-dev mailing list