Ioi, > On Apr 11, 2016, at 7:11 PM, Ioi Lam <ioi....@oracle.com> wrote: > > Hi Jiangli, > > > Thanks for the review: > > On 4/11/16 6:44 PM, Jiangli Zhou wrote: >> Hi Ioi, >> >> I like the more structural way of reading/writing the compact table with >> SimpleCompactHashtable. It looks quite clean overall. >> >> - How about using VALUE_ONLY_BUCKET_TYPE, which is more descriptive than >> TINY_BUCKET_TYPE? >> > OK, I will make the change. > >> - The following assert in CompactSymbolTableWriter::add() limits the total >> shared space size to be less than MAX_SHARED_DELTA unnecessarily. Symbols >> are allocated from the RO space at dump time. We only need to make sure the >> max delta between the ‘base_address’ and the end of RO space is less than >> MAX_SHARED_DELTA. This is not a new issue introduced by your change, you >> don’t have to address that as part of this change if you prefer. I’ll file a >> separate RFE. >> > I think it's better to do this in a separate RFE since MAX_SHARED_DELTA is > used elsewhere as well.
I filed JDK-8154108 <https://bugs.openjdk.java.net/browse/JDK-8154108>. > >> 171 void CompactSymbolTableWriter::add(unsigned int hash, Symbol *symbol) { >> 172 address base_address = address(MetaspaceShared::shared_rs()->base()); >> 173 uintx max_delta = uintx(MetaspaceShared::shared_rs()->size()); >> 174 assert(max_delta <= MAX_SHARED_DELTA, "range check"); >> >> - Why is the default RO space size increased? >> > That's because the symbol table is moved from RW to RO, so I had to change > the RO minimum size, or else > test/runtime/SharedArchiveFile/LimitSharedSizes.java would fail. Ok. Thanks, Jiangli >> - src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/SymbolTable.java >> - >> src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/CompactHashTable.java >> Copyright year. > > Will fix. > > Thanks > - Ioi >> >> Thanks, >> Jiangli >> >>> On Mar 31, 2016, at 10:43 PM, Ioi Lam <ioi....@oracle.com >>> <mailto:ioi....@oracle.com>> wrote: >>> >>> Please review >>> >>> http://cr.openjdk.java.net/~iklam/jdk9/8150607_cleanup_compact_hashtable.v01/ >>> >>> <http://cr.openjdk.java.net/%7Eiklam/jdk9/8150607_cleanup_compact_hashtable.v01/> >>> >>> Bug: Clean up CompactHashtable >>> >>> https://bugs.openjdk.java.net/browse/JDK-8150607 >>> <https://bugs.openjdk.java.net/browse/JDK-8150607> >>> >>> Summary of fix: >>> >>> [1] Instead of reading/writing the table bit-by-bit, which is tedious and >>> error prone, use SimpleCompactHashtable::serialize(), which is more >>> structural. >>> >>> [2] Split up the _buckets and _entries into two separate arrays, so the >>> dumping and walking code is easier to understand >>> >>> (see comments above SimpleCompactHashtable declaration) >>> These 2 arrays are now allocated from the RO region (used to be in RW) >>> >>> [3] Renamed a few things >>> >>> COMPACT_BUCKET_TYPE -> TINY_BUCKET_TYPE >>> (having something called "compact" in CompactHashtable is confusing) >>> >>> The old names "dump_table" (actually dumping the buckets) and >>> "dump_buckets" (actually dumping the entries) were conflicting with >>> terminology used elsewhere. Now the terminology is unified: >>> "buckets" = the main index, "entries" = the second level. >>> >>> lookup_entry -> decode_entry (it wasn't doing any lookup) >>> >>> [4] Changed all "*p++" to "array->at_put", so out-of-bounds can be >>> checked with assert. >>> >>> [5] Replaced all juint to u4 (suggested by Coleen) >>> >>> [6] templatize the iterator (see CompactHashtable::symbols_do -> >>> SimpleCompactHashtable::iterate) >>> >>> [7] I also added a test case using Serviceability Agent -- due to the lack >>> of >>> a regression test, the walking of the compact hashtable in SA had been >>> broken for a while before it was fixed in JDK-8151368, so having a test >>> case would make the code more maintainable. >>> >>> Tests: >>> >>> Hotspot JTREG tests >>> >>> Thanks >>> - Ioi >> >