8015268: NPG: 2.5% regression in young GC times on CRM Sales Opty

Split SystemDictionary and ClassLoaderDataGraph root processing to help load balancing.

Reviewed-by: tschatzl, johnc
This commit is contained in:
Stefan Karlsson 2013-05-27 15:22:59 +02:00
parent 7c176c9678
commit 2ccd92e927
7 changed files with 27 additions and 12 deletions

View file

@ -120,6 +120,9 @@ void MarkFromRootsTask::do_it(GCTaskManager* manager, uint which) {
case system_dictionary:
SystemDictionary::always_strong_oops_do(&mark_and_push_closure);
break;
case class_loader_data:
ClassLoaderDataGraph::always_strong_oops_do(&mark_and_push_closure, &follow_klass_closure, true);
break;

View file

@ -98,7 +98,8 @@ class MarkFromRootsTask : public GCTask {
management = 6,
jvmti = 7,
system_dictionary = 8,
code_cache = 9
class_loader_data = 9,
code_cache = 10
};
private:
RootType _root_type;

View file

@ -2338,6 +2338,7 @@ void PSParallelCompact::marking_phase(ParCompactionManager* cm,
q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::flat_profiler));
q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::management));
q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::system_dictionary));
q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::class_loader_data));
q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::jvmti));
q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::code_cache));

View file

@ -408,6 +408,7 @@ bool PSScavenge::invoke_no_policy() {
q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::flat_profiler));
q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management));
q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary));
q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::class_loader_data));
q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jvmti));
q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::code_cache));

View file

@ -79,15 +79,16 @@ void ScavengeRootsTask::do_it(GCTaskManager* manager, uint which) {
break;
case system_dictionary:
{
SystemDictionary::oops_do(&roots_closure);
// Move this to another root_type?
PSScavengeKlassClosure klass_closure(pm);
ClassLoaderDataGraph::oops_do(&roots_closure, &klass_closure, false);
}
break;
case class_loader_data:
{
PSScavengeKlassClosure klass_closure(pm);
ClassLoaderDataGraph::oops_do(&roots_closure, &klass_closure, false);
}
break;
case management:
Management::oops_do(&roots_closure);
break;

View file

@ -59,9 +59,10 @@ class ScavengeRootsTask : public GCTask {
object_synchronizer = 4,
flat_profiler = 5,
system_dictionary = 6,
management = 7,
jvmti = 8,
code_cache = 9
class_loader_data = 7,
management = 8,
jvmti = 9,
code_cache = 10
};
private:
RootType _root_type;