RFR (XS) 8185160 -XX:DumpLoadedClassList omits graal classes
David Holmes
david.holmes at oracle.com
Wed Oct 18 04:04:25 UTC 2017
Hi Ioi,
On 18/10/2017 1:52 PM, Ioi Lam wrote:
> http://cr.openjdk.java.net/~iklam/jdk10/8185160-dump-class-list-omits-graal.v01/
>
> https://bugs.openjdk.java.net/browse/JDK-8185160
>
> Summary:
>
> DumpLoadedClassList skips classes that can't be stored into the CDS
> archive. For boot and platform loaders, only classes from the JRT image
> are listed.
>
> The test for "is this class from JRT image" was insufficient. It
> checked only classes whose source ends with "...../modules". For the
> platform loader, which loads the graal classes, the source is in the
> form "jrt:/jdk.internal.vm.compiler".
>
> The fix is to also check for a "jrt:" prefix.
So ./share/classfile/classLoader.hpp:
static bool is_jrt(const char* name) { return string_ends_with(name,
MODULES_IMAGE_NAME); }
is a badly named function or just plain broken?
> I also restructured the code to make it easier to read -- the nesting of
> || and && is hard to follow.
>
> The original code had a subtle bug with the "!" operator:
>
> 5938 if (((class_loader == NULL &&
> !ClassLoader::contains_append_entry(stream->source())) ||
> 5939 SystemDictionary::is_platform_class_loader(class_loader)) &&
> 5940 !ClassLoader::is_jrt(stream->source())) {
>
> So if (class_loader == NULL &&
> ClassLoader::contains_append_entry(stream->source()) was true,
> the class would NOT be skipped.
>
> The new version removes the "!".
So there should be an updated test to trigger the original bug.
Thanks,
David
> Thanks
> - Ioi
More information about the hotspot-runtime-dev
mailing list