RFR(S) 8214450 Use a higher-level function to store Strings into CDS archive
Jiangli Zhou
jiangli.zhou at oracle.com
Wed Nov 28 19:54:08 UTC 2018
Hi Ioi,
The would change the archiving behavior for the edge cases with extra
large String (larger than one GC region). The code in
StringTable::create_archived_string() skips a String that's too large to
be archive-able and continues without aborting the dump process.
Extremely large Strings are rare but possible, we don't need to fail the
whole dumping process in that case.
HeapShared::archive_reachable_objects_from is generic subgraph archiving
routine, which needs to bail out when an object in the graph fails to
archive (because we don't do unrolling). Changing
StringTable::create_archived_string to use
HeapShared::archive_reachable_objects_from also adds more complexities
to subgraph archiving. Now it needs to deal with NULL subgraph info.
We can either leave StringTable::create_archived_string unchanged or
create a new API that does graph archiving without the subgraph_info
Klass recording for the Strings. The API needs to walk a graph twice.
First time is to detect if an object is too large and skip the graph.
Or, we need to archive the leaf object first.
The bug fix in HeapShared::check_closed_archive_heap_region_object_class
looks good.
Thanks,
Jiangli
On 11/28/18 10:21 AM, Ioi Lam wrote:
> http://cr.openjdk.java.net/~iklam/jdk12/8214450-cleanup-string-archive.v01/
>
> https://bugs.openjdk.java.net/browse/JDK-8214450
>
> This is a clean up that simplifies the archiving of shared strings. Also:
> - removed java_lang_String::set_value_raw which has become dead code.
> - fixed a bug in
> HeapShared::check_closed_archive_heap_region_object_class,
> and renamed/commented this function for clarity.
>
> All CDS tests passed locally. Running hs-tiers{1-4} just for sanity.
More information about the hotspot-runtime-dev
mailing list