RFR: 8242440: use separate, destroyable JavaVM instances per libgraal compiler thread
Doug Simon
dnsimon at openjdk.java.net
Sat Apr 16 12:02:52 UTC 2022
Currently, libgraal runs in a single, permanent JavaVM instance loaded from libjvmcicompiler.so. This poses 2 problems:
1. The memory used for libgraal is never released, even when the libgraal compiler queues are idle.
2. Since all libgraal HotSpot compiler threads share the same SVM heap, libgraal compilation is effectively paused when a GC occurs (SVM currently has a stop the world collector). The more compiler threads there are, the more often this happens.
This PR implements the following solution to these problems:
1. Create a new JavaVM instance per libgraal compiler thread (i.e. a separate SVM isolate per thread). This prevents GC in one libgraal thread from impacting another libgraal thread.
2. Destroy the JavaVM instances when a libgraal compiler thread becomes idle and create a new one when subsequent compilation requests arrive.
Most of the changes are in JVMCI specific files. The most significant change to shared code is the addition of the `JavaThread:: _libjvmci_runtime` field. This is required as any thread (not just a `CompilerThread`) can be associated with a specific `JVMCIRuntime` object.
-------------
Commit messages:
- add support for multiple libjvmci runtimes
Changes: https://git.openjdk.java.net/jdk/pull/8262/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8262&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8242440
Stats: 1008 lines in 22 files changed: 812 ins; 74 del; 122 mod
Patch: https://git.openjdk.java.net/jdk/pull/8262.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/8262/head:pull/8262
PR: https://git.openjdk.java.net/jdk/pull/8262
More information about the hotspot-dev
mailing list