RFR: 8313224: Avoid calling JavaThread::current() in MemAllocator::Allocation constructor [v2]

Coleen Phillimore coleenp at openjdk.org
Thu Aug 10 15:05:29 UTC 2023


On Tue, 1 Aug 2023 16:37:56 GMT, Ioi Lam <iklam at openjdk.org> wrote:

>> Summary: Avoid calling `JavaThread::current()` since we already have a `Thread*` in `MemAllocator::_thread`.
>> 
>> Although the latter is declared to be a `Thead*` and not a `JavaThread*`, the calling context requires the current thread to be a `JavaThread`, and  `MemAllocator::_thread` was initialized to be  `Thread::current`, so I changed the code from 
>> 
>> 
>> _thread(JavaThread::current()),
>> 
>> 
>> to
>> 
>> 
>> assert(Thread::current()->is_Java_thread(), "must be used by JavaThreads only");
>> assert(Thread::current() == allocator._thread, "do not pass MemAllocator across threads");
>> _thread = JavaThread::cast(allocator._thread);
>> 
>> 
>> I also clean up a few other lines to limit the explicit use of `JavaThread*`.
>> 
>> This fix improved `java --version` by about 0.6% for my prototype of [JDK-8310823](https://bugs.openjdk.org/browse/JDK-8310823), which allocates ~24000 heap objects at VM start-up.
>
> Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:
> 
>   @tschatzl comments

Well, it's good to remove some thread arguments to eliminate some source of confusion.

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

PR Review: https://git.openjdk.org/jdk/pull/15058#pullrequestreview-1572095601


More information about the hotspot-gc-dev mailing list