annotate src/share/vm/gc_implementation/parNew/parNewGeneration.hpp @ 1951:899bbbdcb6ea

6997298: fatal error: must own lock CMS_markBitMap_lock during heap dump Summary: Since we are at a stop-world pause, the existing CMS-phase checks are sufficient for safety, and the locking check can be safely elided. Elaborated documentation comment to the case where class unloading and verification are disabled, and the query happens when we aren't in the sweeping phase, where the answer "false" would be (almost everywhere) too pessimistic. Reviewed-by: jmasa, johnc, tonyp
author ysr
date Fri, 05 Nov 2010 13:20:37 -0700
parents 894b1d7c7e01
children f95d63e2154a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
1665
a93a9eda13f7 6962947: shared TaskQueue statistics
jcoomes
parents: 1552
diff changeset
2 * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1145
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1145
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1145
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
a61af66fc99e Initial load
duke
parents:
diff changeset
25 class ChunkArray;
a61af66fc99e Initial load
duke
parents:
diff changeset
26 class ParScanWithoutBarrierClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
27 class ParScanWithBarrierClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
28 class ParRootScanWithoutBarrierClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
29 class ParRootScanWithBarrierTwoGensClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
30 class ParEvacuateFollowersClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
31
a61af66fc99e Initial load
duke
parents:
diff changeset
32 // It would be better if these types could be kept local to the .cpp file,
a61af66fc99e Initial load
duke
parents:
diff changeset
33 // but they must be here to allow ParScanClosure::do_oop_work to be defined
a61af66fc99e Initial load
duke
parents:
diff changeset
34 // in genOopClosures.inline.hpp.
a61af66fc99e Initial load
duke
parents:
diff changeset
35
1665
a93a9eda13f7 6962947: shared TaskQueue statistics
jcoomes
parents: 1552
diff changeset
36 typedef Padded<OopTaskQueue> ObjToScanQueue;
a93a9eda13f7 6962947: shared TaskQueue statistics
jcoomes
parents: 1552
diff changeset
37 typedef GenericTaskQueueSet<ObjToScanQueue> ObjToScanQueueSet;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
38
a61af66fc99e Initial load
duke
parents:
diff changeset
39 class ParKeepAliveClosure: public DefNewGeneration::KeepAliveClosure {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
40 private:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
41 ParScanWeakRefClosure* _par_cl;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
42 protected:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
43 template <class T> void do_oop_work(T* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
44 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
45 ParKeepAliveClosure(ParScanWeakRefClosure* cl);
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
46 virtual void do_oop(oop* p);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
47 virtual void do_oop(narrowOop* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
48 };
a61af66fc99e Initial load
duke
parents:
diff changeset
49
a61af66fc99e Initial load
duke
parents:
diff changeset
50 // The state needed by thread performing parallel young-gen collection.
a61af66fc99e Initial load
duke
parents:
diff changeset
51 class ParScanThreadState {
a61af66fc99e Initial load
duke
parents:
diff changeset
52 friend class ParScanThreadStateSet;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
53 private:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
54 ObjToScanQueue *_work_queue;
1836
894b1d7c7e01 6423256: GC stacks should use a better data structure
jcoomes
parents: 1833
diff changeset
55 Stack<oop>* const _overflow_stack;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
56
a61af66fc99e Initial load
duke
parents:
diff changeset
57 ParGCAllocBuffer _to_space_alloc_buffer;
a61af66fc99e Initial load
duke
parents:
diff changeset
58
a61af66fc99e Initial load
duke
parents:
diff changeset
59 ParScanWithoutBarrierClosure _to_space_closure; // scan_without_gc_barrier
a61af66fc99e Initial load
duke
parents:
diff changeset
60 ParScanWithBarrierClosure _old_gen_closure; // scan_with_gc_barrier
a61af66fc99e Initial load
duke
parents:
diff changeset
61 ParRootScanWithoutBarrierClosure _to_space_root_closure; // scan_root_without_gc_barrier
a61af66fc99e Initial load
duke
parents:
diff changeset
62 // One of these two will be passed to process_strong_roots, which will
a61af66fc99e Initial load
duke
parents:
diff changeset
63 // set its generation. The first is for two-gen configs where the
a61af66fc99e Initial load
duke
parents:
diff changeset
64 // old gen collects the perm gen; the second is for arbitrary configs.
a61af66fc99e Initial load
duke
parents:
diff changeset
65 // The second isn't used right now (it used to be used for the train, an
a61af66fc99e Initial load
duke
parents:
diff changeset
66 // incremental collector) but the declaration has been left as a reminder.
a61af66fc99e Initial load
duke
parents:
diff changeset
67 ParRootScanWithBarrierTwoGensClosure _older_gen_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
68 // This closure will always be bound to the old gen; it will be used
a61af66fc99e Initial load
duke
parents:
diff changeset
69 // in evacuate_followers.
a61af66fc99e Initial load
duke
parents:
diff changeset
70 ParRootScanWithBarrierTwoGensClosure _old_gen_root_closure; // scan_old_root_with_gc_barrier
a61af66fc99e Initial load
duke
parents:
diff changeset
71 ParEvacuateFollowersClosure _evacuate_followers;
a61af66fc99e Initial load
duke
parents:
diff changeset
72 DefNewGeneration::IsAliveClosure _is_alive_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
73 ParScanWeakRefClosure _scan_weak_ref_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
74 ParKeepAliveClosure _keep_alive_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
75
a61af66fc99e Initial load
duke
parents:
diff changeset
76
a61af66fc99e Initial load
duke
parents:
diff changeset
77 Space* _to_space;
a61af66fc99e Initial load
duke
parents:
diff changeset
78 Space* to_space() { return _to_space; }
a61af66fc99e Initial load
duke
parents:
diff changeset
79
679
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
80 ParNewGeneration* _young_gen;
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
81 ParNewGeneration* young_gen() const { return _young_gen; }
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
82
0
a61af66fc99e Initial load
duke
parents:
diff changeset
83 Generation* _old_gen;
a61af66fc99e Initial load
duke
parents:
diff changeset
84 Generation* old_gen() { return _old_gen; }
a61af66fc99e Initial load
duke
parents:
diff changeset
85
a61af66fc99e Initial load
duke
parents:
diff changeset
86 HeapWord *_young_old_boundary;
a61af66fc99e Initial load
duke
parents:
diff changeset
87
a61af66fc99e Initial load
duke
parents:
diff changeset
88 int _hash_seed;
a61af66fc99e Initial load
duke
parents:
diff changeset
89 int _thread_num;
a61af66fc99e Initial load
duke
parents:
diff changeset
90 ageTable _ageTable;
a61af66fc99e Initial load
duke
parents:
diff changeset
91
a61af66fc99e Initial load
duke
parents:
diff changeset
92 bool _to_space_full;
a61af66fc99e Initial load
duke
parents:
diff changeset
93
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
94 #if TASKQUEUE_STATS
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
95 size_t _term_attempts;
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
96 size_t _overflow_refills;
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
97 size_t _overflow_refill_objs;
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
98 #endif // TASKQUEUE_STATS
0
a61af66fc99e Initial load
duke
parents:
diff changeset
99
1145
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
100 // Stats for promotion failure
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
101 size_t _promotion_failure_size;
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
102
0
a61af66fc99e Initial load
duke
parents:
diff changeset
103 // Timing numbers.
a61af66fc99e Initial load
duke
parents:
diff changeset
104 double _start;
a61af66fc99e Initial load
duke
parents:
diff changeset
105 double _start_strong_roots;
a61af66fc99e Initial load
duke
parents:
diff changeset
106 double _strong_roots_time;
a61af66fc99e Initial load
duke
parents:
diff changeset
107 double _start_term;
a61af66fc99e Initial load
duke
parents:
diff changeset
108 double _term_time;
a61af66fc99e Initial load
duke
parents:
diff changeset
109
a61af66fc99e Initial load
duke
parents:
diff changeset
110 // Helper for trim_queues. Scans subset of an array and makes
a61af66fc99e Initial load
duke
parents:
diff changeset
111 // remainder available for work stealing.
a61af66fc99e Initial load
duke
parents:
diff changeset
112 void scan_partial_array_and_push_remainder(oop obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
113
a61af66fc99e Initial load
duke
parents:
diff changeset
114 // In support of CMS' parallel rescan of survivor space.
a61af66fc99e Initial load
duke
parents:
diff changeset
115 ChunkArray* _survivor_chunk_array;
a61af66fc99e Initial load
duke
parents:
diff changeset
116 ChunkArray* survivor_chunk_array() { return _survivor_chunk_array; }
a61af66fc99e Initial load
duke
parents:
diff changeset
117
a61af66fc99e Initial load
duke
parents:
diff changeset
118 void record_survivor_plab(HeapWord* plab_start, size_t plab_word_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
119
a61af66fc99e Initial load
duke
parents:
diff changeset
120 ParScanThreadState(Space* to_space_, ParNewGeneration* gen_,
a61af66fc99e Initial load
duke
parents:
diff changeset
121 Generation* old_gen_, int thread_num_,
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
122 ObjToScanQueueSet* work_queue_set_,
1836
894b1d7c7e01 6423256: GC stacks should use a better data structure
jcoomes
parents: 1833
diff changeset
123 Stack<oop>* overflow_stacks_,
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
124 size_t desired_plab_sz_,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
125 ParallelTaskTerminator& term_);
a61af66fc99e Initial load
duke
parents:
diff changeset
126
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
127 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
128 ageTable* age_table() {return &_ageTable;}
a61af66fc99e Initial load
duke
parents:
diff changeset
129
a61af66fc99e Initial load
duke
parents:
diff changeset
130 ObjToScanQueue* work_queue() { return _work_queue; }
a61af66fc99e Initial load
duke
parents:
diff changeset
131
a61af66fc99e Initial load
duke
parents:
diff changeset
132 ParGCAllocBuffer* to_space_alloc_buffer() {
a61af66fc99e Initial load
duke
parents:
diff changeset
133 return &_to_space_alloc_buffer;
a61af66fc99e Initial load
duke
parents:
diff changeset
134 }
a61af66fc99e Initial load
duke
parents:
diff changeset
135
a61af66fc99e Initial load
duke
parents:
diff changeset
136 ParEvacuateFollowersClosure& evacuate_followers_closure() { return _evacuate_followers; }
a61af66fc99e Initial load
duke
parents:
diff changeset
137 DefNewGeneration::IsAliveClosure& is_alive_closure() { return _is_alive_closure; }
a61af66fc99e Initial load
duke
parents:
diff changeset
138 ParScanWeakRefClosure& scan_weak_ref_closure() { return _scan_weak_ref_closure; }
a61af66fc99e Initial load
duke
parents:
diff changeset
139 ParKeepAliveClosure& keep_alive_closure() { return _keep_alive_closure; }
a61af66fc99e Initial load
duke
parents:
diff changeset
140 ParScanClosure& older_gen_closure() { return _older_gen_closure; }
a61af66fc99e Initial load
duke
parents:
diff changeset
141 ParRootScanWithoutBarrierClosure& to_space_root_closure() { return _to_space_root_closure; };
a61af66fc99e Initial load
duke
parents:
diff changeset
142
a61af66fc99e Initial load
duke
parents:
diff changeset
143 // Decrease queue size below "max_size".
a61af66fc99e Initial load
duke
parents:
diff changeset
144 void trim_queues(int max_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
145
679
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
146 // Private overflow stack usage
1836
894b1d7c7e01 6423256: GC stacks should use a better data structure
jcoomes
parents: 1833
diff changeset
147 Stack<oop>* overflow_stack() { return _overflow_stack; }
679
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
148 bool take_from_overflow_stack();
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
149 void push_on_overflow_stack(oop p);
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
150
0
a61af66fc99e Initial load
duke
parents:
diff changeset
151 // Is new_obj a candidate for scan_partial_array_and_push_remainder method.
a61af66fc99e Initial load
duke
parents:
diff changeset
152 inline bool should_be_partially_scanned(oop new_obj, oop old_obj) const;
a61af66fc99e Initial load
duke
parents:
diff changeset
153
a61af66fc99e Initial load
duke
parents:
diff changeset
154 int* hash_seed() { return &_hash_seed; }
a61af66fc99e Initial load
duke
parents:
diff changeset
155 int thread_num() { return _thread_num; }
a61af66fc99e Initial load
duke
parents:
diff changeset
156
a61af66fc99e Initial load
duke
parents:
diff changeset
157 // Allocate a to-space block of size "sz", or else return NULL.
a61af66fc99e Initial load
duke
parents:
diff changeset
158 HeapWord* alloc_in_to_space_slow(size_t word_sz);
a61af66fc99e Initial load
duke
parents:
diff changeset
159
a61af66fc99e Initial load
duke
parents:
diff changeset
160 HeapWord* alloc_in_to_space(size_t word_sz) {
a61af66fc99e Initial load
duke
parents:
diff changeset
161 HeapWord* obj = to_space_alloc_buffer()->allocate(word_sz);
a61af66fc99e Initial load
duke
parents:
diff changeset
162 if (obj != NULL) return obj;
a61af66fc99e Initial load
duke
parents:
diff changeset
163 else return alloc_in_to_space_slow(word_sz);
a61af66fc99e Initial load
duke
parents:
diff changeset
164 }
a61af66fc99e Initial load
duke
parents:
diff changeset
165
a61af66fc99e Initial load
duke
parents:
diff changeset
166 HeapWord* young_old_boundary() { return _young_old_boundary; }
a61af66fc99e Initial load
duke
parents:
diff changeset
167
a61af66fc99e Initial load
duke
parents:
diff changeset
168 void set_young_old_boundary(HeapWord *boundary) {
a61af66fc99e Initial load
duke
parents:
diff changeset
169 _young_old_boundary = boundary;
a61af66fc99e Initial load
duke
parents:
diff changeset
170 }
a61af66fc99e Initial load
duke
parents:
diff changeset
171
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // Undo the most recent allocation ("obj", of "word_sz").
a61af66fc99e Initial load
duke
parents:
diff changeset
173 void undo_alloc_in_to_space(HeapWord* obj, size_t word_sz);
a61af66fc99e Initial load
duke
parents:
diff changeset
174
1145
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
175 // Promotion failure stats
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
176 size_t promotion_failure_size() { return promotion_failure_size(); }
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
177 void log_promotion_failure(size_t sz) {
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
178 if (_promotion_failure_size == 0) {
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
179 _promotion_failure_size = sz;
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
180 }
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
181 }
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
182 void print_and_clear_promotion_failure_size();
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
183
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
184 #if TASKQUEUE_STATS
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
185 TaskQueueStats & taskqueue_stats() const { return _work_queue->stats; }
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
186
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
187 size_t term_attempts() const { return _term_attempts; }
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
188 size_t overflow_refills() const { return _overflow_refills; }
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
189 size_t overflow_refill_objs() const { return _overflow_refill_objs; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
190
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
191 void note_term_attempt() { ++_term_attempts; }
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
192 void note_overflow_refill(size_t objs) {
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
193 ++_overflow_refills; _overflow_refill_objs += objs;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
194 }
a61af66fc99e Initial load
duke
parents:
diff changeset
195
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
196 void reset_stats();
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
197 #endif // TASKQUEUE_STATS
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
198
0
a61af66fc99e Initial load
duke
parents:
diff changeset
199 void start_strong_roots() {
a61af66fc99e Initial load
duke
parents:
diff changeset
200 _start_strong_roots = os::elapsedTime();
a61af66fc99e Initial load
duke
parents:
diff changeset
201 }
a61af66fc99e Initial load
duke
parents:
diff changeset
202 void end_strong_roots() {
a61af66fc99e Initial load
duke
parents:
diff changeset
203 _strong_roots_time += (os::elapsedTime() - _start_strong_roots);
a61af66fc99e Initial load
duke
parents:
diff changeset
204 }
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
205 double strong_roots_time() const { return _strong_roots_time; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
206 void start_term_time() {
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
207 TASKQUEUE_STATS_ONLY(note_term_attempt());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
208 _start_term = os::elapsedTime();
a61af66fc99e Initial load
duke
parents:
diff changeset
209 }
a61af66fc99e Initial load
duke
parents:
diff changeset
210 void end_term_time() {
a61af66fc99e Initial load
duke
parents:
diff changeset
211 _term_time += (os::elapsedTime() - _start_term);
a61af66fc99e Initial load
duke
parents:
diff changeset
212 }
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
213 double term_time() const { return _term_time; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
214
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
215 double elapsed_time() const {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
216 return os::elapsedTime() - _start;
a61af66fc99e Initial load
duke
parents:
diff changeset
217 }
a61af66fc99e Initial load
duke
parents:
diff changeset
218 };
a61af66fc99e Initial load
duke
parents:
diff changeset
219
a61af66fc99e Initial load
duke
parents:
diff changeset
220 class ParNewGenTask: public AbstractGangTask {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
221 private:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
222 ParNewGeneration* _gen;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
223 Generation* _next_gen;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
224 HeapWord* _young_old_boundary;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
225 class ParScanThreadStateSet* _state_set;
a61af66fc99e Initial load
duke
parents:
diff changeset
226
a61af66fc99e Initial load
duke
parents:
diff changeset
227 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
228 ParNewGenTask(ParNewGeneration* gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
229 Generation* next_gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
230 HeapWord* young_old_boundary,
a61af66fc99e Initial load
duke
parents:
diff changeset
231 ParScanThreadStateSet* state_set);
a61af66fc99e Initial load
duke
parents:
diff changeset
232
a61af66fc99e Initial load
duke
parents:
diff changeset
233 HeapWord* young_old_boundary() { return _young_old_boundary; }
a61af66fc99e Initial load
duke
parents:
diff changeset
234
a61af66fc99e Initial load
duke
parents:
diff changeset
235 void work(int i);
a61af66fc99e Initial load
duke
parents:
diff changeset
236 };
a61af66fc99e Initial load
duke
parents:
diff changeset
237
a61af66fc99e Initial load
duke
parents:
diff changeset
238 class KeepAliveClosure: public DefNewGeneration::KeepAliveClosure {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
239 protected:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
240 template <class T> void do_oop_work(T* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
241 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
242 KeepAliveClosure(ScanWeakRefClosure* cl);
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
243 virtual void do_oop(oop* p);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
244 virtual void do_oop(narrowOop* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
245 };
a61af66fc99e Initial load
duke
parents:
diff changeset
246
a61af66fc99e Initial load
duke
parents:
diff changeset
247 class EvacuateFollowersClosureGeneral: public VoidClosure {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
248 private:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
249 GenCollectedHeap* _gch;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
250 int _level;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
251 OopsInGenClosure* _scan_cur_or_nonheap;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
252 OopsInGenClosure* _scan_older;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
253 public:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
254 EvacuateFollowersClosureGeneral(GenCollectedHeap* gch, int level,
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
255 OopsInGenClosure* cur,
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
256 OopsInGenClosure* older);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
257 virtual void do_void();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
258 };
a61af66fc99e Initial load
duke
parents:
diff changeset
259
a61af66fc99e Initial load
duke
parents:
diff changeset
260 // Closure for scanning ParNewGeneration.
a61af66fc99e Initial load
duke
parents:
diff changeset
261 // Same as ScanClosure, except does parallel GC barrier.
a61af66fc99e Initial load
duke
parents:
diff changeset
262 class ScanClosureWithParBarrier: public ScanClosure {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
263 protected:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
264 template <class T> void do_oop_work(T* p);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
265 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
266 ScanClosureWithParBarrier(ParNewGeneration* g, bool gc_barrier);
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
267 virtual void do_oop(oop* p);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
268 virtual void do_oop(narrowOop* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
269 };
a61af66fc99e Initial load
duke
parents:
diff changeset
270
a61af66fc99e Initial load
duke
parents:
diff changeset
271 // Implements AbstractRefProcTaskExecutor for ParNew.
a61af66fc99e Initial load
duke
parents:
diff changeset
272 class ParNewRefProcTaskExecutor: public AbstractRefProcTaskExecutor {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
273 private:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
274 ParNewGeneration& _generation;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
275 ParScanThreadStateSet& _state_set;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
276 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
277 ParNewRefProcTaskExecutor(ParNewGeneration& generation,
a61af66fc99e Initial load
duke
parents:
diff changeset
278 ParScanThreadStateSet& state_set)
a61af66fc99e Initial load
duke
parents:
diff changeset
279 : _generation(generation), _state_set(state_set)
a61af66fc99e Initial load
duke
parents:
diff changeset
280 { }
a61af66fc99e Initial load
duke
parents:
diff changeset
281
a61af66fc99e Initial load
duke
parents:
diff changeset
282 // Executes a task using worker threads.
a61af66fc99e Initial load
duke
parents:
diff changeset
283 virtual void execute(ProcessTask& task);
a61af66fc99e Initial load
duke
parents:
diff changeset
284 virtual void execute(EnqueueTask& task);
a61af66fc99e Initial load
duke
parents:
diff changeset
285 // Switch to single threaded mode.
a61af66fc99e Initial load
duke
parents:
diff changeset
286 virtual void set_single_threaded_mode();
a61af66fc99e Initial load
duke
parents:
diff changeset
287 };
a61af66fc99e Initial load
duke
parents:
diff changeset
288
a61af66fc99e Initial load
duke
parents:
diff changeset
289
a61af66fc99e Initial load
duke
parents:
diff changeset
290 // A Generation that does parallel young-gen collection.
a61af66fc99e Initial load
duke
parents:
diff changeset
291
a61af66fc99e Initial load
duke
parents:
diff changeset
292 class ParNewGeneration: public DefNewGeneration {
a61af66fc99e Initial load
duke
parents:
diff changeset
293 friend class ParNewGenTask;
a61af66fc99e Initial load
duke
parents:
diff changeset
294 friend class ParNewRefProcTask;
a61af66fc99e Initial load
duke
parents:
diff changeset
295 friend class ParNewRefProcTaskExecutor;
a61af66fc99e Initial load
duke
parents:
diff changeset
296 friend class ParScanThreadStateSet;
534
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
297 friend class ParEvacuateFollowersClosure;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
298
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
299 private:
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
300 // The per-worker-thread work queues
0
a61af66fc99e Initial load
duke
parents:
diff changeset
301 ObjToScanQueueSet* _task_queues;
a61af66fc99e Initial load
duke
parents:
diff changeset
302
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
303 // Per-worker-thread local overflow stacks
1836
894b1d7c7e01 6423256: GC stacks should use a better data structure
jcoomes
parents: 1833
diff changeset
304 Stack<oop>* _overflow_stacks;
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
305
0
a61af66fc99e Initial load
duke
parents:
diff changeset
306 // Desired size of survivor space plab's
a61af66fc99e Initial load
duke
parents:
diff changeset
307 PLABStats _plab_stats;
a61af66fc99e Initial load
duke
parents:
diff changeset
308
a61af66fc99e Initial load
duke
parents:
diff changeset
309 // A list of from-space images of to-be-scanned objects, threaded through
a61af66fc99e Initial load
duke
parents:
diff changeset
310 // klass-pointers (klass information already copied to the forwarded
a61af66fc99e Initial load
duke
parents:
diff changeset
311 // image.) Manipulated with CAS.
a61af66fc99e Initial load
duke
parents:
diff changeset
312 oop _overflow_list;
534
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
313 NOT_PRODUCT(ssize_t _num_par_pushes;)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
314
a61af66fc99e Initial load
duke
parents:
diff changeset
315 // If true, older generation does not support promotion undo, so avoid.
a61af66fc99e Initial load
duke
parents:
diff changeset
316 static bool _avoid_promotion_undo;
a61af66fc99e Initial load
duke
parents:
diff changeset
317
a61af66fc99e Initial load
duke
parents:
diff changeset
318 // This closure is used by the reference processor to filter out
a61af66fc99e Initial load
duke
parents:
diff changeset
319 // references to live referent.
a61af66fc99e Initial load
duke
parents:
diff changeset
320 DefNewGeneration::IsAliveClosure _is_alive_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
321
a61af66fc99e Initial load
duke
parents:
diff changeset
322 static oop real_forwardee_slow(oop obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
323 static void waste_some_time();
a61af66fc99e Initial load
duke
parents:
diff changeset
324
a61af66fc99e Initial load
duke
parents:
diff changeset
325 // Preserve the mark of "obj", if necessary, in preparation for its mark
a61af66fc99e Initial load
duke
parents:
diff changeset
326 // word being overwritten with a self-forwarding-pointer.
a61af66fc99e Initial load
duke
parents:
diff changeset
327 void preserve_mark_if_necessary(oop obj, markOop m);
a61af66fc99e Initial load
duke
parents:
diff changeset
328
a61af66fc99e Initial load
duke
parents:
diff changeset
329 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
330
a61af66fc99e Initial load
duke
parents:
diff changeset
331 bool _survivor_overflow;
a61af66fc99e Initial load
duke
parents:
diff changeset
332
a61af66fc99e Initial load
duke
parents:
diff changeset
333 bool avoid_promotion_undo() { return _avoid_promotion_undo; }
a61af66fc99e Initial load
duke
parents:
diff changeset
334 void set_avoid_promotion_undo(bool v) { _avoid_promotion_undo = v; }
a61af66fc99e Initial load
duke
parents:
diff changeset
335
a61af66fc99e Initial load
duke
parents:
diff changeset
336 bool survivor_overflow() { return _survivor_overflow; }
a61af66fc99e Initial load
duke
parents:
diff changeset
337 void set_survivor_overflow(bool v) { _survivor_overflow = v; }
a61af66fc99e Initial load
duke
parents:
diff changeset
338
a61af66fc99e Initial load
duke
parents:
diff changeset
339 // Adjust the tenuring threshold. See the implementation for
a61af66fc99e Initial load
duke
parents:
diff changeset
340 // the details of the policy.
a61af66fc99e Initial load
duke
parents:
diff changeset
341 virtual void adjust_desired_tenuring_threshold();
a61af66fc99e Initial load
duke
parents:
diff changeset
342
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
343 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
344 ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level);
a61af66fc99e Initial load
duke
parents:
diff changeset
345
a61af66fc99e Initial load
duke
parents:
diff changeset
346 ~ParNewGeneration() {
a61af66fc99e Initial load
duke
parents:
diff changeset
347 for (uint i = 0; i < ParallelGCThreads; i++)
a61af66fc99e Initial load
duke
parents:
diff changeset
348 delete _task_queues->queue(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
349
a61af66fc99e Initial load
duke
parents:
diff changeset
350 delete _task_queues;
a61af66fc99e Initial load
duke
parents:
diff changeset
351 }
a61af66fc99e Initial load
duke
parents:
diff changeset
352
1833
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1710
diff changeset
353 static bool in_use();
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1710
diff changeset
354
0
a61af66fc99e Initial load
duke
parents:
diff changeset
355 virtual void ref_processor_init();
a61af66fc99e Initial load
duke
parents:
diff changeset
356 virtual Generation::Name kind() { return Generation::ParNew; }
a61af66fc99e Initial load
duke
parents:
diff changeset
357 virtual const char* name() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
358 virtual const char* short_name() const { return "ParNew"; }
a61af66fc99e Initial load
duke
parents:
diff changeset
359
a61af66fc99e Initial load
duke
parents:
diff changeset
360 // override
a61af66fc99e Initial load
duke
parents:
diff changeset
361 virtual bool refs_discovery_is_mt() const {
a61af66fc99e Initial load
duke
parents:
diff changeset
362 assert(UseParNewGC, "ParNewGeneration only when UseParNewGC");
a61af66fc99e Initial load
duke
parents:
diff changeset
363 return ParallelGCThreads > 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
364 }
a61af66fc99e Initial load
duke
parents:
diff changeset
365
a61af66fc99e Initial load
duke
parents:
diff changeset
366 // Make the collection virtual.
a61af66fc99e Initial load
duke
parents:
diff changeset
367 virtual void collect(bool full,
a61af66fc99e Initial load
duke
parents:
diff changeset
368 bool clear_all_soft_refs,
a61af66fc99e Initial load
duke
parents:
diff changeset
369 size_t size,
a61af66fc99e Initial load
duke
parents:
diff changeset
370 bool is_tlab);
a61af66fc99e Initial load
duke
parents:
diff changeset
371
a61af66fc99e Initial load
duke
parents:
diff changeset
372 // This needs to be visible to the closure function.
a61af66fc99e Initial load
duke
parents:
diff changeset
373 // "obj" is the object to be copied, "m" is a recent value of its mark
a61af66fc99e Initial load
duke
parents:
diff changeset
374 // that must not contain a forwarding pointer (though one might be
a61af66fc99e Initial load
duke
parents:
diff changeset
375 // inserted in "obj"s mark word by a parallel thread).
a61af66fc99e Initial load
duke
parents:
diff changeset
376 inline oop copy_to_survivor_space(ParScanThreadState* par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
377 oop obj, size_t obj_sz, markOop m) {
a61af66fc99e Initial load
duke
parents:
diff changeset
378 if (_avoid_promotion_undo) {
a61af66fc99e Initial load
duke
parents:
diff changeset
379 return copy_to_survivor_space_avoiding_promotion_undo(par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
380 obj, obj_sz, m);
a61af66fc99e Initial load
duke
parents:
diff changeset
381 }
a61af66fc99e Initial load
duke
parents:
diff changeset
382
a61af66fc99e Initial load
duke
parents:
diff changeset
383 return copy_to_survivor_space_with_undo(par_scan_state, obj, obj_sz, m);
a61af66fc99e Initial load
duke
parents:
diff changeset
384 }
a61af66fc99e Initial load
duke
parents:
diff changeset
385
a61af66fc99e Initial load
duke
parents:
diff changeset
386 oop copy_to_survivor_space_avoiding_promotion_undo(ParScanThreadState* par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
387 oop obj, size_t obj_sz, markOop m);
a61af66fc99e Initial load
duke
parents:
diff changeset
388
a61af66fc99e Initial load
duke
parents:
diff changeset
389 oop copy_to_survivor_space_with_undo(ParScanThreadState* par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
390 oop obj, size_t obj_sz, markOop m);
a61af66fc99e Initial load
duke
parents:
diff changeset
391
534
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
392 // in support of testing overflow code
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
393 NOT_PRODUCT(int _overflow_counter;)
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
394 NOT_PRODUCT(bool should_simulate_overflow();)
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
395
679
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
396 // Accessor for overflow list
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
397 oop overflow_list() { return _overflow_list; }
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
398
0
a61af66fc99e Initial load
duke
parents:
diff changeset
399 // Push the given (from-space) object on the global overflow list.
534
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
400 void push_on_overflow_list(oop from_space_obj, ParScanThreadState* par_scan_state);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
401
a61af66fc99e Initial load
duke
parents:
diff changeset
402 // If the global overflow list is non-empty, move some tasks from it
679
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
403 // onto "work_q" (which need not be empty). No more than 1/4 of the
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
404 // available space on "work_q" is used.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
405 bool take_from_overflow_list(ParScanThreadState* par_scan_state);
679
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
406 bool take_from_overflow_list_work(ParScanThreadState* par_scan_state);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
407
a61af66fc99e Initial load
duke
parents:
diff changeset
408 // The task queues to be used by parallel GC threads.
a61af66fc99e Initial load
duke
parents:
diff changeset
409 ObjToScanQueueSet* task_queues() {
a61af66fc99e Initial load
duke
parents:
diff changeset
410 return _task_queues;
a61af66fc99e Initial load
duke
parents:
diff changeset
411 }
a61af66fc99e Initial load
duke
parents:
diff changeset
412
a61af66fc99e Initial load
duke
parents:
diff changeset
413 PLABStats* plab_stats() {
a61af66fc99e Initial load
duke
parents:
diff changeset
414 return &_plab_stats;
a61af66fc99e Initial load
duke
parents:
diff changeset
415 }
a61af66fc99e Initial load
duke
parents:
diff changeset
416
a61af66fc99e Initial load
duke
parents:
diff changeset
417 size_t desired_plab_sz() {
a61af66fc99e Initial load
duke
parents:
diff changeset
418 return _plab_stats.desired_plab_sz();
a61af66fc99e Initial load
duke
parents:
diff changeset
419 }
a61af66fc99e Initial load
duke
parents:
diff changeset
420
a61af66fc99e Initial load
duke
parents:
diff changeset
421 static oop real_forwardee(oop obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
422
a61af66fc99e Initial load
duke
parents:
diff changeset
423 DEBUG_ONLY(static bool is_legal_forward_ptr(oop p);)
a61af66fc99e Initial load
duke
parents:
diff changeset
424 };