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