RFR: 8078644: CDS needs to support JVMTI CFLH
Coleen Phillimore
coleen.phillimore at oracle.com
Fri Sep 9 16:06:00 UTC 2016
http://cr.openjdk.java.net/~jiangli/8078644/webrev.00/src/share/vm/classfile/klassFactory.cpp.udiff.html
+ instanceKlassHandle nh = instanceKlassHandle();
You can just use NULL now. The code that creates nullHandles will be
cleaned up.
Thank you for putting this function in this place.
http://cr.openjdk.java.net/~jiangli/8078644/webrev.00/src/share/vm/classfile/systemDictionary.cpp.udiff.html
+ instanceKlassHandle new_ik =
KlassFactory::check_shared_class_file_load_hook(
+ ik, class_name, class_loader, protection_domain, CHECK_(nh));
Here the InstanceKlass ik is read out of the archive, so you don't want
to deallocate it. Is this right?
http://cr.openjdk.java.net/~jiangli/8078644/webrev.00/src/share/vm/memory/filemap.hpp.udiff.html
+ // The estimated optional space size. Only the portion containning
data is
+ // written out to the archive and mapped at runtime. There is no
memory waste
+ // due to unused portion in optional space.
+ static size_t optional_space_size() {
+ return core_spaces_size();
+ }
Why is optional_spaces_size the same as core_spaces_size() ? Is that
just what it turned out to be? I guess it would be annoying to have
another OptionalSharedSpacesSize parameter? Can the comment include why
this size was picked? There's an extra 'n' in containing in the comment.
http://cr.openjdk.java.net/~jiangli/8078644/webrev.00/src/share/vm/utilities/debug.cpp.udiff.html
This seems to be missing the string for optional_data.
http://cr.openjdk.java.net/~jiangli/8078644/webrev.00/src/share/vm/memory/metaspaceShared.cpp.html
Can you remove the lines, which are no longer true (I was looking for
how MetaspaceShared::is_in_shared_space()) is defined with the od space.
1075 // Need to keep the bounds of the ro and rw space for the Metaspace::contains
1076 // call, or is_in_shared_space.
So it looks like here you always map in the od section? The space
isn't getting paged in unless it's used, but it is mapped in, true? Are
there plans in 10 to not map it in?
I think you need
char* od_base; in order to unmap the od section if the checksum fails.
+ mapinfo->map_region(od) != NULL && mapinfo->verify_region_checksum(od)) {
Everything else looks good except these minor comments and questions.
Thanks,
Coleen
On 9/6/16 8:14 PM, Jiangli Zhou wrote:
> Hi,
>
> Please review the following change thats support JVMTI class_file_load_hook(CFLH) during initial loading of shared classes. The webrev also removes the temporary workaround that disables CDS when JVMTI CFLH is required (JDK-8141341 <https://bugs.openjdk.java.net/browse/JDK-8141341>).
>
> webrev:http://cr.openjdk.java.net/~jiangli/8078644/webrev.00/
> bug: JDK-8078644 <https://bugs.openjdk.java.net/browse/JDK-8078644>
>
> Class file data is needed when posting CFLH. For shared classes, the class file data are now archived at dump time. That avoids re-reading the class file data from the JAR file or reconstituting the data at runtime, which would add class loading overhead for shared classes.
>
> To minimize the runtime memory overhead, the archived class file data are stored in a separate shared space, called ‘optional data space’ (od). The ‘od’ space a new region in the archive. It does not increase runtime memory usage when JvmtiExport::should_post_class_file_load_hook() is false. The memory contains the archived class file data is only paged in when the VM needs to post CFLH. The ‘od’ space can be shared by different processes.
>
> When loading shared class at runtime, we now call JvmtiExport::post_class_file_load_hook() with the archive class file data if needed. If JVMTI agent modifies the class, new InstanceKlass is created using the modified class data and the archived class is ignored.
>
> Tested with JPRT, CDS tests and QA tests.
>
> Thanks,
> Jiangli
More information about the hotspot-runtime-dev
mailing list