41 SharedHeap* SharedHeap::_sh;
42
43 // The set of potentially parallel tasks in root scanning.
44 enum SH_process_roots_tasks {
45 SH_PS_Universe_oops_do,
46 SH_PS_JNIHandles_oops_do,
47 SH_PS_ObjectSynchronizer_oops_do,
48 SH_PS_FlatProfiler_oops_do,
49 SH_PS_Management_oops_do,
50 SH_PS_SystemDictionary_oops_do,
51 SH_PS_ClassLoaderDataGraph_oops_do,
52 SH_PS_jvmti_oops_do,
53 SH_PS_CodeCache_oops_do,
54 // Leave this one last.
55 SH_PS_NumElements
56 };
57
58 SharedHeap::SharedHeap(CollectorPolicy* policy_) :
59 CollectedHeap(),
60 _collector_policy(policy_),
61 _rem_set(NULL),
62 _strong_roots_scope(NULL),
63 _strong_roots_parity(0),
64 _process_strong_tasks(new SubTasksDone(SH_PS_NumElements)),
65 _workers(NULL)
66 {
67 if (_process_strong_tasks == NULL || !_process_strong_tasks->valid()) {
68 vm_exit_during_initialization("Failed necessary allocation.");
69 }
70 _sh = this; // ch is static, should be set only once.
71 if (UseConcMarkSweepGC || UseG1GC) {
72 _workers = new FlexibleWorkGang("Parallel GC Threads", ParallelGCThreads,
73 /* are_GC_task_threads */true,
74 /* are_ConcurrentGC_threads */false);
75 if (_workers == NULL) {
76 vm_exit_during_initialization("Failed necessary allocation.");
77 } else {
78 _workers->initialize_workers();
79 }
80 }
81 }
|
41 SharedHeap* SharedHeap::_sh;
42
43 // The set of potentially parallel tasks in root scanning.
44 enum SH_process_roots_tasks {
45 SH_PS_Universe_oops_do,
46 SH_PS_JNIHandles_oops_do,
47 SH_PS_ObjectSynchronizer_oops_do,
48 SH_PS_FlatProfiler_oops_do,
49 SH_PS_Management_oops_do,
50 SH_PS_SystemDictionary_oops_do,
51 SH_PS_ClassLoaderDataGraph_oops_do,
52 SH_PS_jvmti_oops_do,
53 SH_PS_CodeCache_oops_do,
54 // Leave this one last.
55 SH_PS_NumElements
56 };
57
58 SharedHeap::SharedHeap(CollectorPolicy* policy_) :
59 CollectedHeap(),
60 _collector_policy(policy_),
61 _strong_roots_scope(NULL),
62 _strong_roots_parity(0),
63 _process_strong_tasks(new SubTasksDone(SH_PS_NumElements)),
64 _workers(NULL)
65 {
66 if (_process_strong_tasks == NULL || !_process_strong_tasks->valid()) {
67 vm_exit_during_initialization("Failed necessary allocation.");
68 }
69 _sh = this; // ch is static, should be set only once.
70 if (UseConcMarkSweepGC || UseG1GC) {
71 _workers = new FlexibleWorkGang("Parallel GC Threads", ParallelGCThreads,
72 /* are_GC_task_threads */true,
73 /* are_ConcurrentGC_threads */false);
74 if (_workers == NULL) {
75 vm_exit_during_initialization("Failed necessary allocation.");
76 } else {
77 _workers->initialize_workers();
78 }
79 }
80 }
|