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