1 /*
2 * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
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 }
81
82 int SharedHeap::n_termination() {
83 return _process_strong_tasks->n_threads();
84 }
85
86 void SharedHeap::set_n_termination(int t) {
87 _process_strong_tasks->set_n_threads(t);
88 }
89
90 bool SharedHeap::heap_lock_held_for_gc() {
91 Thread* t = Thread::current();
|
1 /*
2 * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
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("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 }
81
82 int SharedHeap::n_termination() {
83 return _process_strong_tasks->n_threads();
84 }
85
86 void SharedHeap::set_n_termination(int t) {
87 _process_strong_tasks->set_n_threads(t);
88 }
89
90 bool SharedHeap::heap_lock_held_for_gc() {
91 Thread* t = Thread::current();
|