8015422: Large performance hit when the StringTable is walked twice in Parallel Scavenge

Combine the calls to StringTable::unlink and StringTable::oops_do in Parallel Scavenge.

Reviewed-by: pliden, coleenp
This commit is contained in:
Stefan Karlsson 2013-05-27 12:58:42 +02:00
parent 8b7d3c5d3b
commit c13149ab8d
3 changed files with 11 additions and 7 deletions

View file

@ -450,11 +450,9 @@ bool PSScavenge::invoke_no_policy() {
reference_processor()->enqueue_discovered_references(NULL);
}
// Unlink any dead interned Strings
StringTable::unlink(&_is_alive_closure);
// Process the remaining live ones
PSScavengeRootsClosure root_closure(promotion_manager);
StringTable::oops_do(&root_closure);
// Unlink any dead interned Strings and process the remaining live ones.
PSScavengeRootsClosure root_closure(promotion_manager);
StringTable::unlink_or_oops_do(&_is_alive_closure, &root_closure);
// Finally, flush the promotion_manager's labs, and deallocate its stacks.
PSPromotionManager::post_scavenge();