Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8204805 | 11.0.1 | Coleen Phillimore | P3 | Resolved | Fixed | team |
Currently the GCs walk the code cache or otherwise visit nmethods to determine if the nmethod should be unloaded when their oops are not alive. The oops in nmethods are weak references. At the same time, the metadata is cleaned out of the nmethod inline caches and exception tables for classes that have been unloaded. In GC epilogue, for all GCs except G1, the code cache is walked again to clean out inline caches that refer to unloaded nmethods.
This enhancement is provide separate functions for:
1. walk code cache (or otherwise visit nmethods through nmethod tables) to pass the GC is_alive closure and determine whether the nmethod should be unloaded
2. cleaning the nmethod from unloaded class metadata and unloaded nmethod.
Essentially this moves cleaning unloaded class metadata into the phase of cleaning unloaded nmethods.
G1 walks the nmethods for unloading with is_alive closure and also for cleaning nmethod metadata and unloaded nmethods. This refactoring doesn't change that.
I filed this under runtime because I have the change, even though it's a combination of compiler and gc changes, mostly compiler changes
Why do this? Separating these allows concurrency for each of these nmethod walking purposes.
This enhancement is provide separate functions for:
1. walk code cache (or otherwise visit nmethods through nmethod tables) to pass the GC is_alive closure and determine whether the nmethod should be unloaded
2. cleaning the nmethod from unloaded class metadata and unloaded nmethod.
Essentially this moves cleaning unloaded class metadata into the phase of cleaning unloaded nmethods.
G1 walks the nmethods for unloading with is_alive closure and also for cleaning nmethod metadata and unloaded nmethods. This refactoring doesn't change that.
I filed this under runtime because I have the change, even though it's a combination of compiler and gc changes, mostly compiler changes
Why do this? Separating these allows concurrency for each of these nmethod walking purposes.
- backported by
-
JDK-8204805 Split nmethod unloading from inline cache cleaning
-
- Resolved
-
- relates to
-
JDK-8205577 parallel/TestPrintGCDetailsVerbose.java fails assertion
-
- Closed
-