RFR: 8250989: Consolidate buffer allocation code for CDS static/dynamic dumping

Ioi Lam iklam at openjdk.java.net
Tue Feb 2 00:05:45 UTC 2021


On Mon, 1 Feb 2021 17:47:18 GMT, Calvin Cheung <ccheung at openjdk.org> wrote:

>> Before this PR, when a static CDS archive is dumped, we would unconditionally allocate a 4GB ReservedSpace and use that as the buffer for writing the archive content. We usually don't need such a big ReservedSpace. this also unnecessarily complicates Metaspace::global_initialize().
>> 
>> After this PR, both we first load all the classes and then allocate a buffer with an appropriate size.
>> 
>> I also simplified the pointer relocation code that prepares the archive to be mapped at the "requested location" (usually 0x800000000), and improved the comments.
>> 
>> We used to have lots of special cases for adjusting pointers during dynamic dump. All of those are removed.
>> 
>> Reviewers, please start with
>> - Header comments in archiveBuilder.hpp that describe the overall process of archive dumping
>> - `MetaspaceShared::initialize_for_static_dump()`
>> - `ArchiveBuilder::reserve_buffer()`
>> - Comments around `RelocateBufferToRequested` in archiveBuilder.cpp
>
> src/hotspot/share/classfile/symbolTable.cpp line 620:
> 
>> 618:   OffsetCompactHashtable<const char*, Symbol*, symbol_equals_compact_hashtable_entry> * table;
>> 619:   if (is_static_archive) {
>> 620:     table = &_shared_table;
> 
> Maybe keeping this within a DEBUG_ONLY block if it's still applicable?

This check cannot be done anymore -- `_shared_table` is initialized with the "requested" addresses but `sym`is still at "buffer" address, so the check will fail (I forgot whether the lookup would crash or the assert will fail).

-------------

PR: https://git.openjdk.java.net/jdk/pull/2296


More information about the hotspot-runtime-dev mailing list