RFR (L) 8072061: Automatically determine optimal sizes for the CDS regions

coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Fri Jun 30 22:16:09 UTC 2017

Ioi, I have one comment and one question.


This cleanup is worth all of the change.   It's nice to not conflate 
metaspace allocation with the creating shared region anymore.   It 
started out as a little bit of extra code but has expanded to all of 
what you removed.   So I guess you've convinced me that copying metadata 
is worth doing.


Why do you have to include metaspaceShared.hpp here?

I've prereviewed this and have no further comments.   This looks good!  
Thank you for making the changes I suggested in the pre-review.  
Starting with copy_and_compact() it makes sense what this is doing and 
looks like it'll be easier to understand overall.


On 6/29/17 6:55 PM, Ioi Lam wrote:
> https://bugs.openjdk.java.net/browse/JDK-8072061
> http://cr.openjdk.java.net/~iklam/jdk10/8072061-auto-size-cds-region.v10/
> ------------------------------------------------------------------------------ 
> Motivation:
>   The CDS archive is divided in several regions such as RO, RW, etc. In
>   JDK 9, when you are dumping with a custom classlist, you must manually
>   specify the region sizes using flags such as -XX:SharedReadOnlySize.
>   This is error prone and cumbersome.
>   This RFE makes it possible to automatically determine the optimal sizes
>   of the regions.
> Overview:
>   With this RFE, during CDS dump time, all class metadata are first
>   allocated outside of the shared regions. Then, we scan all of the
>   reachable metadata objects, determine whether they are RO or RW, and
>   then copy them into the destination regions.
>   After all objects are copied, we scan and relocate all the pointers to
>   point to the new copies.
> Notes to reviewers:
>   To implement the copy and relocation operations, we have added the new
>   MetaspaceClosure API for walking all the reachablemetadata objects, and
>   scanning all the pointers embedded in these objects.
>   Please start in metaspaceShared.cppand follow the code path:
>     ArchiveCompactor::copy_and_compact()
>     -> iterate_roots()
>       -> SystemDictionary::classes_do(it)
>         -> Dictionary::classes_do(MetaspaceClosure* it)
> -> it->push(probe->klass_addr())
>   At this point you will get into metaspaceClosure.hpp. Please read the
>   comments around MetaspaceClosure::Ref about the (lack of) C++ vtables,
>   and why the template classes ObjectRef, PrimitiveArrayRef and
>   PointerArrayRef are needed.
>   Once you understand how ObjectRefand PointerArrayRef work, you can
>   see that the above it->push(probe->klass_addr()) call will be invoking
>   this template method:
>      template <class T> void push(T** mpp, Writability w = _default) {
>        ObjectRef<T> ref(mpp);
>        push_impl(&ref, w);
>      }
>   which will eventually call into Klass::metaspace_pointers_do(), which
>   will eventually recursively iterate over all the Klasses, Methods,
>   ConstantPools and other types of MetaspaceObj.
> Testingstatus:
>   All CDS tests have passed locally on Linux. All new tests have been
> implemented.
> I am waiting to run RBT tests on other platforms.
> Thanks
> - Ioi

More information about the hotspot-runtime-dev mailing list