RFR (M): (7u60): Backport of 8027476: Improve performance of Stringtable unlink, 8027455: Improve symbol table scan times during gc pauses (original) (raw)

Thomas Schatzl thomas.schatzl at oracle.com
Tue Jan 28 10:57:33 UTC 2014


Hi,

I got the link for the new webrev wrong, taking two from the original patch. Sorry.

On Tue, 2014-01-28 at 10:51 +0100, Thomas Schatzl wrote:

Hi all,

could I have reviews for the following backport of the symbol table/ string table parallelization change? It implements parallelization of string table and symbol table scan during G1 full GC and remark for 7u60. There is some difference in the patches due to how 7u60 managing the iteration over the string table: - 7u60 has no StringTable/StringTable::unlinkoroopsdo() methods, but only separate StringTable/SymbolTable::unlink() and StringTable/SymbolTable::oopsdo() methods. - 7u60 allows sharing of strings using CDS, making minor changes necessary.

In particular, in StringTable::buckets_unlink(), the code that considers shared strings need to be kept alive, i.e. in http://cr.openjdk.java.net/~tschatzl/8027476.7u60/webrev/src/share/vm/classfile/symbolTable.cpp.frames.html , in the right (new) version the following code.

820 // Shared entries are normally at the end of the bucket and if we run into 821 // a shared entry, then there is nothing more to remove. However, if we 822 // have rehashed the table, then the shared entries are no longer at the 823 // end of the bucket. 824 if (entry->is_shared() && !use_alternate_hashcode()) { 825 break; 826 } 827 assert(entry->literal() != NULL, "just checking"); 828 if (entry->is_shared() || is_alive->do_object_b(entry->literal())) {

In 8u20/9 the corresponding code is just:

http://cr.openjdk.java.net/~tschatzl/8027476/webrev.1/src/share/vm/classfile/symbolTable.cpp.frames.html , again, right frame:

835 assert(!entry->is_shared(), "CDS not used for the StringTable"); 836 837 if (is_alive->do_object_b(entry->literal())) {

Automatic merge got confused and simply did not take this difference into account. I hope this clears this recent, rather cryptic comment up.

These differences are contained in symbolTable.?pp, the rest is verbatim backport iirc.

New webrev: http://cr.openjdk.java.net/~tschatzl/8027476/webrev

Correct webrev is at:

http://cr.openjdk.java.net/~tschatzl/8027476.7u60/webrev

Old Webrev: http://cr.openjdk.java.net/~tschatzl/8027476/webrev.1

CRs: https://bugs.openjdk.java.net/browse/JDK-8027455 https://bugs.openjdk.java.net/browse/JDK-8027476 Testing: jtreg test case, jprt, FMW apps Thanks, Thomas

Sorry, Thomas



More information about the hotspot-gc-dev mailing list