Mercurial > hg > graal-jvmci-8
comparison src/share/vm/memory/sharedHeap.cpp @ 1833:8b10f48633dc
6984287: Regularize how GC parallel workers are specified.
Summary: Associate number of GC workers with the workgang as opposed to the task.
Reviewed-by: johnc, ysr
author | jmasa |
---|---|
date | Mon, 20 Sep 2010 14:38:38 -0700 |
parents | c18cbe5936b8 |
children | f95d63e2154a |
comparison
equal
deleted
inserted
replaced
1781:97fbf5beff7b | 1833:8b10f48633dc |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 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 | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
48 CollectedHeap(), | 48 CollectedHeap(), |
49 _collector_policy(policy_), | 49 _collector_policy(policy_), |
50 _perm_gen(NULL), _rem_set(NULL), | 50 _perm_gen(NULL), _rem_set(NULL), |
51 _strong_roots_parity(0), | 51 _strong_roots_parity(0), |
52 _process_strong_tasks(new SubTasksDone(SH_PS_NumElements)), | 52 _process_strong_tasks(new SubTasksDone(SH_PS_NumElements)), |
53 _workers(NULL), _n_par_threads(0) | 53 _n_par_threads(0), |
54 _workers(NULL) | |
54 { | 55 { |
55 if (_process_strong_tasks == NULL || !_process_strong_tasks->valid()) { | 56 if (_process_strong_tasks == NULL || !_process_strong_tasks->valid()) { |
56 vm_exit_during_initialization("Failed necessary allocation."); | 57 vm_exit_during_initialization("Failed necessary allocation."); |
57 } | 58 } |
58 _sh = this; // ch is static, should be set only once. | 59 _sh = this; // ch is static, should be set only once. |
59 if ((UseParNewGC || | 60 if ((UseParNewGC || |
60 (UseConcMarkSweepGC && CMSParallelRemarkEnabled) || | 61 (UseConcMarkSweepGC && CMSParallelRemarkEnabled) || |
61 UseG1GC) && | 62 UseG1GC) && |
62 ParallelGCThreads > 0) { | 63 ParallelGCThreads > 0) { |
63 _workers = new WorkGang("Parallel GC Threads", ParallelGCThreads, | 64 _workers = new FlexibleWorkGang("Parallel GC Threads", ParallelGCThreads, |
64 /* are_GC_task_threads */true, | 65 /* are_GC_task_threads */true, |
65 /* are_ConcurrentGC_threads */false); | 66 /* are_ConcurrentGC_threads */false); |
66 if (_workers == NULL) { | 67 if (_workers == NULL) { |
67 vm_exit_during_initialization("Failed necessary allocation."); | 68 vm_exit_during_initialization("Failed necessary allocation."); |
69 } else { | |
70 _workers->initialize_workers(); | |
68 } | 71 } |
69 } | 72 } |
70 } | 73 } |
71 | 74 |
72 bool SharedHeap::heap_lock_held_for_gc() { | 75 bool SharedHeap::heap_lock_held_for_gc() { |
75 || ( (t->is_GC_task_thread() || t->is_VM_thread()) | 78 || ( (t->is_GC_task_thread() || t->is_VM_thread()) |
76 && _thread_holds_heap_lock_for_gc); | 79 && _thread_holds_heap_lock_for_gc); |
77 } | 80 } |
78 | 81 |
79 void SharedHeap::set_par_threads(int t) { | 82 void SharedHeap::set_par_threads(int t) { |
83 assert(t == 0 || !UseSerialGC, "Cannot have parallel threads"); | |
80 _n_par_threads = t; | 84 _n_par_threads = t; |
81 _process_strong_tasks->set_par_threads(t); | 85 _process_strong_tasks->set_n_threads(t); |
82 } | 86 } |
83 | 87 |
84 class AssertIsPermClosure: public OopClosure { | 88 class AssertIsPermClosure: public OopClosure { |
85 public: | 89 public: |
86 virtual void do_oop(oop* p) { | 90 virtual void do_oop(oop* p) { |