On Mon, 22 Mar 2021 15:49:24 GMT, Coleen Phillimore <[email protected]> wrote:
> From CR:
> The useful/general BasicHashtable uses a block allocation scheme to
> reportedly reduce fragmentation. When the StringTable and SymbolTable used to
> use this hashtable, performance benefits were reportedly observed because of
> the block allocation scheme. Since these tables were moved to the concurrent
> hashtables, the tables left that use the block allocation scheme are:
>
> AdapterHandlerLibrary, ResolutionError, LoaderConstraints, Leak profiler
> bitset table and Placeholders. 3 of these tables are very small and never
> needed block allocation to prevent fragmentation at least. Also there are 3
> KVHashtables, which are built from BasicHashtable. 2 are used during dumping
> and 1 is ID2KlassTable which appears small.
>
> ModuleEntry, PackageEntry, Dictionary, G1RootSet for nmethods, and
> JvmtiTagMap tables didn't use the block allocation scheme.
>
> Removing this removes 7 pointers per table, and for each ClassLoaderData,
> which has 3 tables, removes 21 pointers.
>
> This change was performance tested on linux and windows.
>
> It was also tested with tier1-6.
Looks good overall. Just some small nits.
src/hotspot/share/utilities/hashtable.cpp line 54:
> 52: BasicHashtableEntry<F>* entry = ::new (NEW_C_HEAP_ARRAY(char,
> this->entry_size(), F))
> 53: BasicHashtableEntry<F>(hashValue);
> 54: assert(_entry_size % HeapWordSize == 0, "");
Is this assert still needed? What's its purpose?
src/hotspot/share/utilities/hashtable.cpp line 64:
> 62:
> 63: if (DumpSharedSpaces) {
> 64: // Avoid random bits in structure padding so we can have
> deterministic content in CDS archive
Hmm, the sequence looks a little odd: the constructor initializes some fields,
they are then zeroed here, and then initialized again below ....
Actually, I think you can get rid of the `if (DumpSharedSpaces)` block for now.
I am not sure if it's needed. Deterministic CDS archive is broken anyway
(https://bugs.openjdk.java.net/browse/JDK-8253495).
That way you can get rid of the entry->set_xxx below as well.
-------------
Changes requested by iklam (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/3123