RFR: 8340826: Should not send unload notification for scratch classes
Leonid Mesnik
lmesnik at openjdk.org
Tue Sep 24 18:43:44 UTC 2024
The jvmti class redefinition creates temporary scratch classes for it's own purposes. These classes are added to corresponding classloaders and might be unloaded.
In this case the jvmti/jfr and log events are generated twice: for original class and for it's scratch.
The bug could be reproduced by jfr test
jdk/jfr/api/metadata/eventtype/TestUnloadingEventClass.java
with '-Xcomp -XX:TieredStopAtLevel=1' or with '-Xcomp'
The test log (modified slightly) shown
[167.294s][info ][class,unload] unloading class jdk.jfr.api.metadata.eventtype.TestUnloadingEventClass$ToBeUnloaded 0x00000000af1006d8 allocated
[167.294s][info ][class,unload] unloading class jdk.jfr.api.metadata.eventtype.TestUnloadingEventClass$ToBeUnloaded 0x00000000af100248 fully_initialized
[167.345s][trace][class,unload] unlinking class (subclass): jdk.jfr.api.metadata.eventtype.TestUnloadingEventClass$ToBeUnloaded
[167.872s][trace][gc ] GC(0) Restored 3597 marks, occupying 57552 B
[167.924s][info ][gc ] GC(0) Pause Full (System.gc()) 34M->2M(136M) 691.041ms
Unloaded count: 2
instead of expected
[159.737s][info ][class,unload] unloading class jdk.jfr.api.metadata.eventtype.TestUnloadingEventClass$ToBeUnloaded 0x0000000041100248 state: fully_initialized
[159.800s][trace][class,unload] unlinking class (subclass): jdk.jfr.api.metadata.eventtype.TestUnloadingEventClass$ToBeUnloaded
[160.341s][trace][gc ] GC(0) Restored 3597 marks, occupying 57552 B
[160.384s][info ][gc ] GC(0) Pause Full (System.gc()) 34M->2M(136M) 710.422ms
The test hang because got 2 events while waiting for one.
The "allocated" version is the scratch class generated by JVMTI JFR agent that redefine classes.
The fix is to don't send notification for scratch classes. The scratch classes shouldn't have dependency so added assertion. Also, we don't expect any other not loaded classes during unloaded.
Thanks Coleen for details about scratch classed.
Tested with tier1-5 and with :jdk_jfr with Xcomp and c1.
-------------
Commit messages:
- 8340826: should not send unload notification for scratch classes
Changes: https://git.openjdk.org/jdk/pull/21166/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21166&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8340826
Stats: 17 lines in 4 files changed: 15 ins; 0 del; 2 mod
Patch: https://git.openjdk.org/jdk/pull/21166.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/21166/head:pull/21166
PR: https://git.openjdk.org/jdk/pull/21166
More information about the hotspot-dev
mailing list