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

Ioi Lam iklam at openjdk.org
Thu Jul 27 20:56:12 UTC 2023


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.

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

Commit messages:
 - 8313224: Avoid calling JavaThread::current() in MemAllocator::Allocation constructor

Changes: https://git.openjdk.org/jdk/pull/15058/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15058&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8313224
  Stats: 18 lines in 2 files changed: 5 ins; 1 del; 12 mod
  Patch: https://git.openjdk.org/jdk/pull/15058.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/15058/head:pull/15058

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


More information about the hotspot-gc-dev mailing list