Mercurial > hg > graal-jvmci-8
diff src/share/vm/classfile/symbolTable.cpp @ 10363:8dbc025ff709
8015422: Large performance hit when the StringTable is walked twice in Parallel Scavenge
Summary: Combine the calls to StringTable::unlink and StringTable::oops_do in Parallel Scavenge.
Reviewed-by: pliden, coleenp
author | stefank |
---|---|
date | Mon, 27 May 2013 12:58:42 +0200 |
parents | 95c00927be11 |
children | 01522ca68fc7 |
line wrap: on
line diff
--- a/src/share/vm/classfile/symbolTable.cpp Mon May 27 12:56:34 2013 +0200 +++ b/src/share/vm/classfile/symbolTable.cpp Mon May 27 12:58:42 2013 +0200 @@ -737,7 +737,7 @@ return result; } -void StringTable::unlink(BoolObjectClosure* is_alive) { +void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f) { // Readers of the table are unlocked, so we should only be removing // entries at a safepoint. assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); @@ -748,6 +748,9 @@ assert(!entry->is_shared(), "CDS not used for the StringTable"); if (is_alive->do_object_b(entry->literal())) { + if (f != NULL) { + f->do_oop((oop*)entry->literal_addr()); + } p = entry->next_addr(); } else { *p = entry->next();