RFR (L) 8072061: Automatically determine optimal sizes for the CDS regions
mikhailo
mikhailo.seledtsov at oracle.com
Wed Jul 5 22:49:09 UTC 2017
Hi Ioi,
Changes to test code look good.
Misha
On 06/29/2017 03: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