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

Mon, 27 May 2013 15:22:59 +0200

author
stefank
date
Mon, 27 May 2013 15:22:59 +0200
changeset 5194
eda078b01c65
parent 5193
0886b99a4d1b
child 5195
95c00927be11

8015268: NPG: 2.5% regression in young GC times on CRM Sales Opty
Summary: Split SystemDictionary and ClassLoaderDataGraph root processing to help load balancing.
Reviewed-by: tschatzl, johnc

src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp file | annotate | diff | comparison | revisions
src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp file | annotate | diff | comparison | revisions
src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp file | annotate | diff | comparison | revisions
src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp file | annotate | diff | comparison | revisions
src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp file | annotate | diff | comparison | revisions
src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp file | annotate | diff | comparison | revisions
src/share/vm/memory/sharedHeap.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp	Fri May 24 14:16:41 2013 +0200
     1.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp	Mon May 27 15:22:59 2013 +0200
     1.3 @@ -120,6 +120,9 @@
     1.4  
     1.5      case system_dictionary:
     1.6        SystemDictionary::always_strong_oops_do(&mark_and_push_closure);
     1.7 +      break;
     1.8 +
     1.9 +    case class_loader_data:
    1.10        ClassLoaderDataGraph::always_strong_oops_do(&mark_and_push_closure, &follow_klass_closure, true);
    1.11        break;
    1.12  
     2.1 --- a/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp	Fri May 24 14:16:41 2013 +0200
     2.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp	Mon May 27 15:22:59 2013 +0200
     2.3 @@ -98,7 +98,8 @@
     2.4      management            = 6,
     2.5      jvmti                 = 7,
     2.6      system_dictionary     = 8,
     2.7 -    code_cache            = 9
     2.8 +    class_loader_data     = 9,
     2.9 +    code_cache            = 10
    2.10    };
    2.11   private:
    2.12    RootType _root_type;
     3.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	Fri May 24 14:16:41 2013 +0200
     3.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	Mon May 27 15:22:59 2013 +0200
     3.3 @@ -2338,6 +2338,7 @@
     3.4      q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::flat_profiler));
     3.5      q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::management));
     3.6      q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::system_dictionary));
     3.7 +    q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::class_loader_data));
     3.8      q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::jvmti));
     3.9      q->enqueue(new MarkFromRootsTask(MarkFromRootsTask::code_cache));
    3.10  
     4.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp	Fri May 24 14:16:41 2013 +0200
     4.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp	Mon May 27 15:22:59 2013 +0200
     4.3 @@ -408,6 +408,7 @@
     4.4        q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::flat_profiler));
     4.5        q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management));
     4.6        q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary));
     4.7 +      q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::class_loader_data));
     4.8        q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jvmti));
     4.9        q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::code_cache));
    4.10  
     5.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp	Fri May 24 14:16:41 2013 +0200
     5.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp	Mon May 27 15:22:59 2013 +0200
     5.3 @@ -79,14 +79,15 @@
     5.4        break;
     5.5  
     5.6      case system_dictionary:
     5.7 -      {
     5.8        SystemDictionary::oops_do(&roots_closure);
     5.9 +      break;
    5.10  
    5.11 -        // Move this to another root_type?
    5.12 -        PSScavengeKlassClosure klass_closure(pm);
    5.13 -        ClassLoaderDataGraph::oops_do(&roots_closure, &klass_closure, false);
    5.14 -      }
    5.15 -      break;
    5.16 +    case class_loader_data:
    5.17 +    {
    5.18 +      PSScavengeKlassClosure klass_closure(pm);
    5.19 +      ClassLoaderDataGraph::oops_do(&roots_closure, &klass_closure, false);
    5.20 +    }
    5.21 +    break;
    5.22  
    5.23      case management:
    5.24        Management::oops_do(&roots_closure);
     6.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp	Fri May 24 14:16:41 2013 +0200
     6.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp	Mon May 27 15:22:59 2013 +0200
     6.3 @@ -59,9 +59,10 @@
     6.4      object_synchronizer   = 4,
     6.5      flat_profiler         = 5,
     6.6      system_dictionary     = 6,
     6.7 -    management            = 7,
     6.8 -    jvmti                 = 8,
     6.9 -    code_cache            = 9
    6.10 +    class_loader_data     = 7,
    6.11 +    management            = 8,
    6.12 +    jvmti                 = 9,
    6.13 +    code_cache            = 10
    6.14    };
    6.15   private:
    6.16    RootType _root_type;
     7.1 --- a/src/share/vm/memory/sharedHeap.cpp	Fri May 24 14:16:41 2013 +0200
     7.2 +++ b/src/share/vm/memory/sharedHeap.cpp	Mon May 27 15:22:59 2013 +0200
     7.3 @@ -45,6 +45,7 @@
     7.4    SH_PS_FlatProfiler_oops_do,
     7.5    SH_PS_Management_oops_do,
     7.6    SH_PS_SystemDictionary_oops_do,
     7.7 +  SH_PS_ClassLoaderDataGraph_oops_do,
     7.8    SH_PS_jvmti_oops_do,
     7.9    SH_PS_StringTable_oops_do,
    7.10    SH_PS_CodeCache_oops_do,
    7.11 @@ -173,12 +174,18 @@
    7.12    if (!_process_strong_tasks->is_task_claimed(SH_PS_SystemDictionary_oops_do)) {
    7.13      if (so & SO_AllClasses) {
    7.14        SystemDictionary::oops_do(roots);
    7.15 +    } else if (so & SO_SystemClasses) {
    7.16 +      SystemDictionary::always_strong_oops_do(roots);
    7.17 +    } else {
    7.18 +      fatal("We should always have selected either SO_AllClasses or SO_SystemClasses");
    7.19 +    }
    7.20 +  }
    7.21 +
    7.22 +  if (!_process_strong_tasks->is_task_claimed(SH_PS_ClassLoaderDataGraph_oops_do)) {
    7.23 +    if (so & SO_AllClasses) {
    7.24        ClassLoaderDataGraph::oops_do(roots, klass_closure, !is_scavenging);
    7.25      } else if (so & SO_SystemClasses) {
    7.26 -      SystemDictionary::always_strong_oops_do(roots);
    7.27        ClassLoaderDataGraph::always_strong_oops_do(roots, klass_closure, !is_scavenging);
    7.28 -    } else {
    7.29 -      fatal("We should always have selected either SO_AllClasses or SO_SystemClasses");
    7.30      }
    7.31    }
    7.32  

mercurial