mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +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,10 +79,11 @@ void ScavengeRootsTask::do_it(GCTaskManager* manager, uint which) {
|
|||
break;
|
||||
|
||||
case system_dictionary:
|
||||
{
|
||||
SystemDictionary::oops_do(&roots_closure);
|
||||
break;
|
||||
|
||||
// Move this to another root_type?
|
||||
case class_loader_data:
|
||||
{
|
||||
PSScavengeKlassClosure klass_closure(pm);
|
||||
ClassLoaderDataGraph::oops_do(&roots_closure, &klass_closure, false);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -45,6 +45,7 @@ enum SH_process_strong_roots_tasks {
|
|||
SH_PS_FlatProfiler_oops_do,
|
||||
SH_PS_Management_oops_do,
|
||||
SH_PS_SystemDictionary_oops_do,
|
||||
SH_PS_ClassLoaderDataGraph_oops_do,
|
||||
SH_PS_jvmti_oops_do,
|
||||
SH_PS_StringTable_oops_do,
|
||||
SH_PS_CodeCache_oops_do,
|
||||
|
@ -173,15 +174,21 @@ void SharedHeap::process_strong_roots(bool activate_scope,
|
|||
if (!_process_strong_tasks->is_task_claimed(SH_PS_SystemDictionary_oops_do)) {
|
||||
if (so & SO_AllClasses) {
|
||||
SystemDictionary::oops_do(roots);
|
||||
ClassLoaderDataGraph::oops_do(roots, klass_closure, !is_scavenging);
|
||||
} else if (so & SO_SystemClasses) {
|
||||
SystemDictionary::always_strong_oops_do(roots);
|
||||
ClassLoaderDataGraph::always_strong_oops_do(roots, klass_closure, !is_scavenging);
|
||||
} else {
|
||||
fatal("We should always have selected either SO_AllClasses or SO_SystemClasses");
|
||||
}
|
||||
}
|
||||
|
||||
if (!_process_strong_tasks->is_task_claimed(SH_PS_ClassLoaderDataGraph_oops_do)) {
|
||||
if (so & SO_AllClasses) {
|
||||
ClassLoaderDataGraph::oops_do(roots, klass_closure, !is_scavenging);
|
||||
} else if (so & SO_SystemClasses) {
|
||||
ClassLoaderDataGraph::always_strong_oops_do(roots, klass_closure, !is_scavenging);
|
||||
}
|
||||
}
|
||||
|
||||
if (!_process_strong_tasks->is_task_claimed(SH_PS_StringTable_oops_do)) {
|
||||
if (so & SO_Strings) {
|
||||
StringTable::oops_do(roots);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue