mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
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:
parent
7c176c9678
commit
2ccd92e927
7 changed files with 27 additions and 12 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue