RFR: 8341452: Test runtime/cds/appcds/DumpRuntimeClassesTest.java from JDK-8324259 is failing
Matias Saavedra Silva
matsaave at openjdk.org
Tue Oct 8 15:04:00 UTC 2024
On Fri, 4 Oct 2024 02:14:38 GMT, David Holmes <dholmes at openjdk.org> wrote:
>> DumpRuntimeClassesTest.java was added in [JDK-8324259](https://bugs.openjdk.org/browse/JDK-8324259) to verify that the newly added dummy call archived classes that are used at CDS runtime. This new test exposed a case where `JarVerifier` is used at CDS runtime while not being in the archive, so this patch performs a dummy call to `JarVerifier`.
>>
>> When using `-Xcomp`, the class `Manifest` is compiled which causes `JarVerifier` to be loaded. This does not occur in other modes since the constructor of `Manifest` doesn't create any instances of `JarVerifier`. The existing dummy call to `Manifest` doesn't load `JarVerifier` either, so a separate dummy call can be used to ensure it is loaded at dumptime. Now that there are multiple dummy calls, they are pulled out into a new method `make_dummy_calls()`. Verified with tier x-y tests.
>
> src/hotspot/share/cds/metaspaceShared.cpp line 757:
>
>> 755: // Some classes are used at CDS runtime but are not loaded, and therefore archived, at
>> 756: // dumptime. We can perform dummmy calls to these classes at dumptime to ensure they
>> 757: // are archived.
>
> This code doesn't just load classes though, it loads, links, initializes them and creates a unwanted instance. Isn't there a simpler way to do this? Do these classes have to be initialized?
The classes make calls to other classes that need to be loaded as well, this code acts like a shortcut to load a list of classes that we use at runtime. These calls mirror the ones used at runtime.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21329#discussion_r1792051531
More information about the hotspot-dev
mailing list