Integrated: 8340826: Should not send unload notification for scratch classes

Leonid Mesnik lmesnik at openjdk.org
Fri Sep 27 15:04:40 UTC 2024


On Tue, 24 Sep 2024 16:29:36 GMT, Leonid Mesnik <lmesnik at openjdk.org> wrote:

> 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.

This pull request has now been integrated.

Changeset: 12de4fbc
Author:    Leonid Mesnik <lmesnik at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/12de4fbce7a314a1c5c84340526cd65b9a4a29d1
Stats:     17 lines in 4 files changed: 15 ins; 0 del; 2 mod

8340826: Should not send unload notification for scratch classes

Reviewed-by: sspitsyn, coleenp

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

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


More information about the hotspot-dev mailing list