annotate src/share/vm/gc_implementation/parNew/parNewGeneration.hpp @ 3762:5c0a3c1858b1

7048782: CMS: assert(last_chunk_index_to_check<= last_chunk_index) failed: parCardTableModRefBS.cpp:359 Summary: The LNC array is sized before the start of a scavenge, while the heap may expand during a scavenge. With CMS, the last block of an arbitrary suffice of the LNC array may expand due to coalition with the expansion delta. We now take care not to attempt access past the end of the LNC array. LNC array code will be cleaned up and suitably encapsulated as part of the forthcoming performance RFE 7043675. Reviewed-by: brutisso
author ysr
date Thu, 02 Jun 2011 10:23:36 -0700
parents f95d63e2154a
children bca17e38de00
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
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_PARNEW_PARNEWGENERATION_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
26 #define SHARE_VM_GC_IMPLEMENTATION_PARNEW_PARNEWGENERATION_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
28 #include "gc_implementation/parNew/parGCAllocBuffer.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
29 #include "memory/defNewGeneration.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
30 #include "utilities/taskqueue.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
31
0
a61af66fc99e Initial load
duke
parents:
diff changeset
32 class ChunkArray;
a61af66fc99e Initial load
duke
parents:
diff changeset
33 class ParScanWithoutBarrierClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
34 class ParScanWithBarrierClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
35 class ParRootScanWithoutBarrierClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
36 class ParRootScanWithBarrierTwoGensClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
37 class ParEvacuateFollowersClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
38
a61af66fc99e Initial load
duke
parents:
diff changeset
39 // It would be better if these types could be kept local to the .cpp file,
a61af66fc99e Initial load
duke
parents:
diff changeset
40 // but they must be here to allow ParScanClosure::do_oop_work to be defined
a61af66fc99e Initial load
duke
parents:
diff changeset
41 // in genOopClosures.inline.hpp.
a61af66fc99e Initial load
duke
parents:
diff changeset
42
1665
a93a9eda13f7 6962947: shared TaskQueue statistics
jcoomes
parents: 1552
diff changeset
43 typedef Padded<OopTaskQueue> ObjToScanQueue;
a93a9eda13f7 6962947: shared TaskQueue statistics
jcoomes
parents: 1552
diff changeset
44 typedef GenericTaskQueueSet<ObjToScanQueue> ObjToScanQueueSet;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
45
a61af66fc99e Initial load
duke
parents:
diff changeset
46 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
47 private:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
48 ParScanWeakRefClosure* _par_cl;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
49 protected:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
50 template <class T> void do_oop_work(T* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
51 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
52 ParKeepAliveClosure(ParScanWeakRefClosure* cl);
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
53 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
54 virtual void do_oop(narrowOop* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
55 };
a61af66fc99e Initial load
duke
parents:
diff changeset
56
a61af66fc99e Initial load
duke
parents:
diff changeset
57 // The state needed by thread performing parallel young-gen collection.
a61af66fc99e Initial load
duke
parents:
diff changeset
58 class ParScanThreadState {
a61af66fc99e Initial load
duke
parents:
diff changeset
59 friend class ParScanThreadStateSet;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
60 private:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
61 ObjToScanQueue *_work_queue;
1836
894b1d7c7e01 6423256: GC stacks should use a better data structure
jcoomes
parents: 1833
diff changeset
62 Stack<oop>* const _overflow_stack;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64 ParGCAllocBuffer _to_space_alloc_buffer;
a61af66fc99e Initial load
duke
parents:
diff changeset
65
a61af66fc99e Initial load
duke
parents:
diff changeset
66 ParScanWithoutBarrierClosure _to_space_closure; // scan_without_gc_barrier
a61af66fc99e Initial load
duke
parents:
diff changeset
67 ParScanWithBarrierClosure _old_gen_closure; // scan_with_gc_barrier
a61af66fc99e Initial load
duke
parents:
diff changeset
68 ParRootScanWithoutBarrierClosure _to_space_root_closure; // scan_root_without_gc_barrier
a61af66fc99e Initial load
duke
parents:
diff changeset
69 // One of these two will be passed to process_strong_roots, which will
a61af66fc99e Initial load
duke
parents:
diff changeset
70 // set its generation. The first is for two-gen configs where the
a61af66fc99e Initial load
duke
parents:
diff changeset
71 // old gen collects the perm gen; the second is for arbitrary configs.
a61af66fc99e Initial load
duke
parents:
diff changeset
72 // The second isn't used right now (it used to be used for the train, an
a61af66fc99e Initial load
duke
parents:
diff changeset
73 // incremental collector) but the declaration has been left as a reminder.
a61af66fc99e Initial load
duke
parents:
diff changeset
74 ParRootScanWithBarrierTwoGensClosure _older_gen_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
75 // This closure will always be bound to the old gen; it will be used
a61af66fc99e Initial load
duke
parents:
diff changeset
76 // in evacuate_followers.
a61af66fc99e Initial load
duke
parents:
diff changeset
77 ParRootScanWithBarrierTwoGensClosure _old_gen_root_closure; // scan_old_root_with_gc_barrier
a61af66fc99e Initial load
duke
parents:
diff changeset
78 ParEvacuateFollowersClosure _evacuate_followers;
a61af66fc99e Initial load
duke
parents:
diff changeset
79 DefNewGeneration::IsAliveClosure _is_alive_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
80 ParScanWeakRefClosure _scan_weak_ref_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
81 ParKeepAliveClosure _keep_alive_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
82
a61af66fc99e Initial load
duke
parents:
diff changeset
83
a61af66fc99e Initial load
duke
parents:
diff changeset
84 Space* _to_space;
a61af66fc99e Initial load
duke
parents:
diff changeset
85 Space* to_space() { return _to_space; }
a61af66fc99e Initial load
duke
parents:
diff changeset
86
679
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
87 ParNewGeneration* _young_gen;
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
88 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
89
0
a61af66fc99e Initial load
duke
parents:
diff changeset
90 Generation* _old_gen;
a61af66fc99e Initial load
duke
parents:
diff changeset
91 Generation* old_gen() { return _old_gen; }
a61af66fc99e Initial load
duke
parents:
diff changeset
92
a61af66fc99e Initial load
duke
parents:
diff changeset
93 HeapWord *_young_old_boundary;
a61af66fc99e Initial load
duke
parents:
diff changeset
94
a61af66fc99e Initial load
duke
parents:
diff changeset
95 int _hash_seed;
a61af66fc99e Initial load
duke
parents:
diff changeset
96 int _thread_num;
a61af66fc99e Initial load
duke
parents:
diff changeset
97 ageTable _ageTable;
a61af66fc99e Initial load
duke
parents:
diff changeset
98
a61af66fc99e Initial load
duke
parents:
diff changeset
99 bool _to_space_full;
a61af66fc99e Initial load
duke
parents:
diff changeset
100
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
101 #if TASKQUEUE_STATS
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
102 size_t _term_attempts;
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
103 size_t _overflow_refills;
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
104 size_t _overflow_refill_objs;
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
105 #endif // TASKQUEUE_STATS
0
a61af66fc99e Initial load
duke
parents:
diff changeset
106
1145
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
107 // Stats for promotion failure
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
108 size_t _promotion_failure_size;
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
109
0
a61af66fc99e Initial load
duke
parents:
diff changeset
110 // Timing numbers.
a61af66fc99e Initial load
duke
parents:
diff changeset
111 double _start;
a61af66fc99e Initial load
duke
parents:
diff changeset
112 double _start_strong_roots;
a61af66fc99e Initial load
duke
parents:
diff changeset
113 double _strong_roots_time;
a61af66fc99e Initial load
duke
parents:
diff changeset
114 double _start_term;
a61af66fc99e Initial load
duke
parents:
diff changeset
115 double _term_time;
a61af66fc99e Initial load
duke
parents:
diff changeset
116
a61af66fc99e Initial load
duke
parents:
diff changeset
117 // Helper for trim_queues. Scans subset of an array and makes
a61af66fc99e Initial load
duke
parents:
diff changeset
118 // remainder available for work stealing.
a61af66fc99e Initial load
duke
parents:
diff changeset
119 void scan_partial_array_and_push_remainder(oop obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
120
a61af66fc99e Initial load
duke
parents:
diff changeset
121 // In support of CMS' parallel rescan of survivor space.
a61af66fc99e Initial load
duke
parents:
diff changeset
122 ChunkArray* _survivor_chunk_array;
a61af66fc99e Initial load
duke
parents:
diff changeset
123 ChunkArray* survivor_chunk_array() { return _survivor_chunk_array; }
a61af66fc99e Initial load
duke
parents:
diff changeset
124
a61af66fc99e Initial load
duke
parents:
diff changeset
125 void record_survivor_plab(HeapWord* plab_start, size_t plab_word_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
126
a61af66fc99e Initial load
duke
parents:
diff changeset
127 ParScanThreadState(Space* to_space_, ParNewGeneration* gen_,
a61af66fc99e Initial load
duke
parents:
diff changeset
128 Generation* old_gen_, int thread_num_,
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
129 ObjToScanQueueSet* work_queue_set_,
1836
894b1d7c7e01 6423256: GC stacks should use a better data structure
jcoomes
parents: 1833
diff changeset
130 Stack<oop>* overflow_stacks_,
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
131 size_t desired_plab_sz_,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
132 ParallelTaskTerminator& term_);
a61af66fc99e Initial load
duke
parents:
diff changeset
133
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
134 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
135 ageTable* age_table() {return &_ageTable;}
a61af66fc99e Initial load
duke
parents:
diff changeset
136
a61af66fc99e Initial load
duke
parents:
diff changeset
137 ObjToScanQueue* work_queue() { return _work_queue; }
a61af66fc99e Initial load
duke
parents:
diff changeset
138
a61af66fc99e Initial load
duke
parents:
diff changeset
139 ParGCAllocBuffer* to_space_alloc_buffer() {
a61af66fc99e Initial load
duke
parents:
diff changeset
140 return &_to_space_alloc_buffer;
a61af66fc99e Initial load
duke
parents:
diff changeset
141 }
a61af66fc99e Initial load
duke
parents:
diff changeset
142
a61af66fc99e Initial load
duke
parents:
diff changeset
143 ParEvacuateFollowersClosure& evacuate_followers_closure() { return _evacuate_followers; }
a61af66fc99e Initial load
duke
parents:
diff changeset
144 DefNewGeneration::IsAliveClosure& is_alive_closure() { return _is_alive_closure; }
a61af66fc99e Initial load
duke
parents:
diff changeset
145 ParScanWeakRefClosure& scan_weak_ref_closure() { return _scan_weak_ref_closure; }
a61af66fc99e Initial load
duke
parents:
diff changeset
146 ParKeepAliveClosure& keep_alive_closure() { return _keep_alive_closure; }
a61af66fc99e Initial load
duke
parents:
diff changeset
147 ParScanClosure& older_gen_closure() { return _older_gen_closure; }
a61af66fc99e Initial load
duke
parents:
diff changeset
148 ParRootScanWithoutBarrierClosure& to_space_root_closure() { return _to_space_root_closure; };
a61af66fc99e Initial load
duke
parents:
diff changeset
149
a61af66fc99e Initial load
duke
parents:
diff changeset
150 // Decrease queue size below "max_size".
a61af66fc99e Initial load
duke
parents:
diff changeset
151 void trim_queues(int max_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
152
679
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
153 // Private overflow stack usage
1836
894b1d7c7e01 6423256: GC stacks should use a better data structure
jcoomes
parents: 1833
diff changeset
154 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
155 bool take_from_overflow_stack();
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
156 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
157
0
a61af66fc99e Initial load
duke
parents:
diff changeset
158 // Is new_obj a candidate for scan_partial_array_and_push_remainder method.
a61af66fc99e Initial load
duke
parents:
diff changeset
159 inline bool should_be_partially_scanned(oop new_obj, oop old_obj) const;
a61af66fc99e Initial load
duke
parents:
diff changeset
160
a61af66fc99e Initial load
duke
parents:
diff changeset
161 int* hash_seed() { return &_hash_seed; }
a61af66fc99e Initial load
duke
parents:
diff changeset
162 int thread_num() { return _thread_num; }
a61af66fc99e Initial load
duke
parents:
diff changeset
163
a61af66fc99e Initial load
duke
parents:
diff changeset
164 // Allocate a to-space block of size "sz", or else return NULL.
a61af66fc99e Initial load
duke
parents:
diff changeset
165 HeapWord* alloc_in_to_space_slow(size_t word_sz);
a61af66fc99e Initial load
duke
parents:
diff changeset
166
a61af66fc99e Initial load
duke
parents:
diff changeset
167 HeapWord* alloc_in_to_space(size_t word_sz) {
a61af66fc99e Initial load
duke
parents:
diff changeset
168 HeapWord* obj = to_space_alloc_buffer()->allocate(word_sz);
a61af66fc99e Initial load
duke
parents:
diff changeset
169 if (obj != NULL) return obj;
a61af66fc99e Initial load
duke
parents:
diff changeset
170 else return alloc_in_to_space_slow(word_sz);
a61af66fc99e Initial load
duke
parents:
diff changeset
171 }
a61af66fc99e Initial load
duke
parents:
diff changeset
172
a61af66fc99e Initial load
duke
parents:
diff changeset
173 HeapWord* young_old_boundary() { return _young_old_boundary; }
a61af66fc99e Initial load
duke
parents:
diff changeset
174
a61af66fc99e Initial load
duke
parents:
diff changeset
175 void set_young_old_boundary(HeapWord *boundary) {
a61af66fc99e Initial load
duke
parents:
diff changeset
176 _young_old_boundary = boundary;
a61af66fc99e Initial load
duke
parents:
diff changeset
177 }
a61af66fc99e Initial load
duke
parents:
diff changeset
178
a61af66fc99e Initial load
duke
parents:
diff changeset
179 // Undo the most recent allocation ("obj", of "word_sz").
a61af66fc99e Initial load
duke
parents:
diff changeset
180 void undo_alloc_in_to_space(HeapWord* obj, size_t word_sz);
a61af66fc99e Initial load
duke
parents:
diff changeset
181
1145
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
182 // Promotion failure stats
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
183 size_t promotion_failure_size() { return promotion_failure_size(); }
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
184 void log_promotion_failure(size_t sz) {
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
185 if (_promotion_failure_size == 0) {
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
186 _promotion_failure_size = sz;
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
187 }
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
188 }
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
189 void print_and_clear_promotion_failure_size();
e018e6884bd8 6631166: CMS: better heuristics when combatting fragmentation
ysr
parents: 695
diff changeset
190
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
191 #if TASKQUEUE_STATS
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
192 TaskQueueStats & taskqueue_stats() const { return _work_queue->stats; }
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
193
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
194 size_t term_attempts() const { return _term_attempts; }
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
195 size_t overflow_refills() const { return _overflow_refills; }
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
196 size_t overflow_refill_objs() const { return _overflow_refill_objs; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
197
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
198 void note_term_attempt() { ++_term_attempts; }
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
199 void note_overflow_refill(size_t objs) {
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
200 ++_overflow_refills; _overflow_refill_objs += objs;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
201 }
a61af66fc99e Initial load
duke
parents:
diff changeset
202
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
203 void reset_stats();
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
204 #endif // TASKQUEUE_STATS
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
205
0
a61af66fc99e Initial load
duke
parents:
diff changeset
206 void start_strong_roots() {
a61af66fc99e Initial load
duke
parents:
diff changeset
207 _start_strong_roots = os::elapsedTime();
a61af66fc99e Initial load
duke
parents:
diff changeset
208 }
a61af66fc99e Initial load
duke
parents:
diff changeset
209 void end_strong_roots() {
a61af66fc99e Initial load
duke
parents:
diff changeset
210 _strong_roots_time += (os::elapsedTime() - _start_strong_roots);
a61af66fc99e Initial load
duke
parents:
diff changeset
211 }
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
212 double strong_roots_time() const { return _strong_roots_time; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
213 void start_term_time() {
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
214 TASKQUEUE_STATS_ONLY(note_term_attempt());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
215 _start_term = os::elapsedTime();
a61af66fc99e Initial load
duke
parents:
diff changeset
216 }
a61af66fc99e Initial load
duke
parents:
diff changeset
217 void end_term_time() {
a61af66fc99e Initial load
duke
parents:
diff changeset
218 _term_time += (os::elapsedTime() - _start_term);
a61af66fc99e Initial load
duke
parents:
diff changeset
219 }
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
220 double term_time() const { return _term_time; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
221
1710
94251661de76 6970376: ParNew: shared TaskQueue statistics
jcoomes
parents: 1665
diff changeset
222 double elapsed_time() const {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
223 return os::elapsedTime() - _start;
a61af66fc99e Initial load
duke
parents:
diff changeset
224 }
a61af66fc99e Initial load
duke
parents:
diff changeset
225 };
a61af66fc99e Initial load
duke
parents:
diff changeset
226
a61af66fc99e Initial load
duke
parents:
diff changeset
227 class ParNewGenTask: public AbstractGangTask {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
228 private:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
229 ParNewGeneration* _gen;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
230 Generation* _next_gen;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
231 HeapWord* _young_old_boundary;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
232 class ParScanThreadStateSet* _state_set;
a61af66fc99e Initial load
duke
parents:
diff changeset
233
a61af66fc99e Initial load
duke
parents:
diff changeset
234 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
235 ParNewGenTask(ParNewGeneration* gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
236 Generation* next_gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
237 HeapWord* young_old_boundary,
a61af66fc99e Initial load
duke
parents:
diff changeset
238 ParScanThreadStateSet* state_set);
a61af66fc99e Initial load
duke
parents:
diff changeset
239
a61af66fc99e Initial load
duke
parents:
diff changeset
240 HeapWord* young_old_boundary() { return _young_old_boundary; }
a61af66fc99e Initial load
duke
parents:
diff changeset
241
a61af66fc99e Initial load
duke
parents:
diff changeset
242 void work(int i);
a61af66fc99e Initial load
duke
parents:
diff changeset
243 };
a61af66fc99e Initial load
duke
parents:
diff changeset
244
a61af66fc99e Initial load
duke
parents:
diff changeset
245 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
246 protected:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
247 template <class T> void do_oop_work(T* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
248 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
249 KeepAliveClosure(ScanWeakRefClosure* cl);
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
250 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
251 virtual void do_oop(narrowOop* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
252 };
a61af66fc99e Initial load
duke
parents:
diff changeset
253
a61af66fc99e Initial load
duke
parents:
diff changeset
254 class EvacuateFollowersClosureGeneral: public VoidClosure {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
255 private:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
256 GenCollectedHeap* _gch;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
257 int _level;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
258 OopsInGenClosure* _scan_cur_or_nonheap;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
259 OopsInGenClosure* _scan_older;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
260 public:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
261 EvacuateFollowersClosureGeneral(GenCollectedHeap* gch, int level,
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
262 OopsInGenClosure* cur,
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
263 OopsInGenClosure* older);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
264 virtual void do_void();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
265 };
a61af66fc99e Initial load
duke
parents:
diff changeset
266
a61af66fc99e Initial load
duke
parents:
diff changeset
267 // Closure for scanning ParNewGeneration.
a61af66fc99e Initial load
duke
parents:
diff changeset
268 // Same as ScanClosure, except does parallel GC barrier.
a61af66fc99e Initial load
duke
parents:
diff changeset
269 class ScanClosureWithParBarrier: public ScanClosure {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
270 protected:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
271 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
272 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
273 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
274 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
275 virtual void do_oop(narrowOop* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
276 };
a61af66fc99e Initial load
duke
parents:
diff changeset
277
a61af66fc99e Initial load
duke
parents:
diff changeset
278 // Implements AbstractRefProcTaskExecutor for ParNew.
a61af66fc99e Initial load
duke
parents:
diff changeset
279 class ParNewRefProcTaskExecutor: public AbstractRefProcTaskExecutor {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
280 private:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
281 ParNewGeneration& _generation;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
282 ParScanThreadStateSet& _state_set;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
283 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
284 ParNewRefProcTaskExecutor(ParNewGeneration& generation,
a61af66fc99e Initial load
duke
parents:
diff changeset
285 ParScanThreadStateSet& state_set)
a61af66fc99e Initial load
duke
parents:
diff changeset
286 : _generation(generation), _state_set(state_set)
a61af66fc99e Initial load
duke
parents:
diff changeset
287 { }
a61af66fc99e Initial load
duke
parents:
diff changeset
288
a61af66fc99e Initial load
duke
parents:
diff changeset
289 // Executes a task using worker threads.
a61af66fc99e Initial load
duke
parents:
diff changeset
290 virtual void execute(ProcessTask& task);
a61af66fc99e Initial load
duke
parents:
diff changeset
291 virtual void execute(EnqueueTask& task);
a61af66fc99e Initial load
duke
parents:
diff changeset
292 // Switch to single threaded mode.
a61af66fc99e Initial load
duke
parents:
diff changeset
293 virtual void set_single_threaded_mode();
a61af66fc99e Initial load
duke
parents:
diff changeset
294 };
a61af66fc99e Initial load
duke
parents:
diff changeset
295
a61af66fc99e Initial load
duke
parents:
diff changeset
296
a61af66fc99e Initial load
duke
parents:
diff changeset
297 // A Generation that does parallel young-gen collection.
a61af66fc99e Initial load
duke
parents:
diff changeset
298
a61af66fc99e Initial load
duke
parents:
diff changeset
299 class ParNewGeneration: public DefNewGeneration {
a61af66fc99e Initial load
duke
parents:
diff changeset
300 friend class ParNewGenTask;
a61af66fc99e Initial load
duke
parents:
diff changeset
301 friend class ParNewRefProcTask;
a61af66fc99e Initial load
duke
parents:
diff changeset
302 friend class ParNewRefProcTaskExecutor;
a61af66fc99e Initial load
duke
parents:
diff changeset
303 friend class ParScanThreadStateSet;
534
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
304 friend class ParEvacuateFollowersClosure;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
305
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
306 private:
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
307 // The per-worker-thread work queues
0
a61af66fc99e Initial load
duke
parents:
diff changeset
308 ObjToScanQueueSet* _task_queues;
a61af66fc99e Initial load
duke
parents:
diff changeset
309
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
310 // Per-worker-thread local overflow stacks
1836
894b1d7c7e01 6423256: GC stacks should use a better data structure
jcoomes
parents: 1833
diff changeset
311 Stack<oop>* _overflow_stacks;
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
312
0
a61af66fc99e Initial load
duke
parents:
diff changeset
313 // Desired size of survivor space plab's
a61af66fc99e Initial load
duke
parents:
diff changeset
314 PLABStats _plab_stats;
a61af66fc99e Initial load
duke
parents:
diff changeset
315
a61af66fc99e Initial load
duke
parents:
diff changeset
316 // A list of from-space images of to-be-scanned objects, threaded through
a61af66fc99e Initial load
duke
parents:
diff changeset
317 // klass-pointers (klass information already copied to the forwarded
a61af66fc99e Initial load
duke
parents:
diff changeset
318 // image.) Manipulated with CAS.
a61af66fc99e Initial load
duke
parents:
diff changeset
319 oop _overflow_list;
534
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
320 NOT_PRODUCT(ssize_t _num_par_pushes;)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
321
a61af66fc99e Initial load
duke
parents:
diff changeset
322 // If true, older generation does not support promotion undo, so avoid.
a61af66fc99e Initial load
duke
parents:
diff changeset
323 static bool _avoid_promotion_undo;
a61af66fc99e Initial load
duke
parents:
diff changeset
324
a61af66fc99e Initial load
duke
parents:
diff changeset
325 // This closure is used by the reference processor to filter out
a61af66fc99e Initial load
duke
parents:
diff changeset
326 // references to live referent.
a61af66fc99e Initial load
duke
parents:
diff changeset
327 DefNewGeneration::IsAliveClosure _is_alive_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
328
a61af66fc99e Initial load
duke
parents:
diff changeset
329 static oop real_forwardee_slow(oop obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
330 static void waste_some_time();
a61af66fc99e Initial load
duke
parents:
diff changeset
331
a61af66fc99e Initial load
duke
parents:
diff changeset
332 // Preserve the mark of "obj", if necessary, in preparation for its mark
a61af66fc99e Initial load
duke
parents:
diff changeset
333 // word being overwritten with a self-forwarding-pointer.
a61af66fc99e Initial load
duke
parents:
diff changeset
334 void preserve_mark_if_necessary(oop obj, markOop m);
a61af66fc99e Initial load
duke
parents:
diff changeset
335
a61af66fc99e Initial load
duke
parents:
diff changeset
336 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
337
a61af66fc99e Initial load
duke
parents:
diff changeset
338 bool _survivor_overflow;
a61af66fc99e Initial load
duke
parents:
diff changeset
339
a61af66fc99e Initial load
duke
parents:
diff changeset
340 bool avoid_promotion_undo() { return _avoid_promotion_undo; }
a61af66fc99e Initial load
duke
parents:
diff changeset
341 void set_avoid_promotion_undo(bool v) { _avoid_promotion_undo = v; }
a61af66fc99e Initial load
duke
parents:
diff changeset
342
a61af66fc99e Initial load
duke
parents:
diff changeset
343 bool survivor_overflow() { return _survivor_overflow; }
a61af66fc99e Initial load
duke
parents:
diff changeset
344 void set_survivor_overflow(bool v) { _survivor_overflow = v; }
a61af66fc99e Initial load
duke
parents:
diff changeset
345
a61af66fc99e Initial load
duke
parents:
diff changeset
346 // Adjust the tenuring threshold. See the implementation for
a61af66fc99e Initial load
duke
parents:
diff changeset
347 // the details of the policy.
a61af66fc99e Initial load
duke
parents:
diff changeset
348 virtual void adjust_desired_tenuring_threshold();
a61af66fc99e Initial load
duke
parents:
diff changeset
349
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
350 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
351 ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level);
a61af66fc99e Initial load
duke
parents:
diff changeset
352
a61af66fc99e Initial load
duke
parents:
diff changeset
353 ~ParNewGeneration() {
a61af66fc99e Initial load
duke
parents:
diff changeset
354 for (uint i = 0; i < ParallelGCThreads; i++)
a61af66fc99e Initial load
duke
parents:
diff changeset
355 delete _task_queues->queue(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
356
a61af66fc99e Initial load
duke
parents:
diff changeset
357 delete _task_queues;
a61af66fc99e Initial load
duke
parents:
diff changeset
358 }
a61af66fc99e Initial load
duke
parents:
diff changeset
359
1833
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1710
diff changeset
360 static bool in_use();
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1710
diff changeset
361
0
a61af66fc99e Initial load
duke
parents:
diff changeset
362 virtual void ref_processor_init();
a61af66fc99e Initial load
duke
parents:
diff changeset
363 virtual Generation::Name kind() { return Generation::ParNew; }
a61af66fc99e Initial load
duke
parents:
diff changeset
364 virtual const char* name() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
365 virtual const char* short_name() const { return "ParNew"; }
a61af66fc99e Initial load
duke
parents:
diff changeset
366
a61af66fc99e Initial load
duke
parents:
diff changeset
367 // override
a61af66fc99e Initial load
duke
parents:
diff changeset
368 virtual bool refs_discovery_is_mt() const {
a61af66fc99e Initial load
duke
parents:
diff changeset
369 assert(UseParNewGC, "ParNewGeneration only when UseParNewGC");
a61af66fc99e Initial load
duke
parents:
diff changeset
370 return ParallelGCThreads > 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
371 }
a61af66fc99e Initial load
duke
parents:
diff changeset
372
a61af66fc99e Initial load
duke
parents:
diff changeset
373 // Make the collection virtual.
a61af66fc99e Initial load
duke
parents:
diff changeset
374 virtual void collect(bool full,
a61af66fc99e Initial load
duke
parents:
diff changeset
375 bool clear_all_soft_refs,
a61af66fc99e Initial load
duke
parents:
diff changeset
376 size_t size,
a61af66fc99e Initial load
duke
parents:
diff changeset
377 bool is_tlab);
a61af66fc99e Initial load
duke
parents:
diff changeset
378
a61af66fc99e Initial load
duke
parents:
diff changeset
379 // This needs to be visible to the closure function.
a61af66fc99e Initial load
duke
parents:
diff changeset
380 // "obj" is the object to be copied, "m" is a recent value of its mark
a61af66fc99e Initial load
duke
parents:
diff changeset
381 // that must not contain a forwarding pointer (though one might be
a61af66fc99e Initial load
duke
parents:
diff changeset
382 // inserted in "obj"s mark word by a parallel thread).
a61af66fc99e Initial load
duke
parents:
diff changeset
383 inline oop copy_to_survivor_space(ParScanThreadState* par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
384 oop obj, size_t obj_sz, markOop m) {
a61af66fc99e Initial load
duke
parents:
diff changeset
385 if (_avoid_promotion_undo) {
a61af66fc99e Initial load
duke
parents:
diff changeset
386 return copy_to_survivor_space_avoiding_promotion_undo(par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
387 obj, obj_sz, m);
a61af66fc99e Initial load
duke
parents:
diff changeset
388 }
a61af66fc99e Initial load
duke
parents:
diff changeset
389
a61af66fc99e Initial load
duke
parents:
diff changeset
390 return copy_to_survivor_space_with_undo(par_scan_state, obj, obj_sz, m);
a61af66fc99e Initial load
duke
parents:
diff changeset
391 }
a61af66fc99e Initial load
duke
parents:
diff changeset
392
a61af66fc99e Initial load
duke
parents:
diff changeset
393 oop copy_to_survivor_space_avoiding_promotion_undo(ParScanThreadState* par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
394 oop obj, size_t obj_sz, markOop m);
a61af66fc99e Initial load
duke
parents:
diff changeset
395
a61af66fc99e Initial load
duke
parents:
diff changeset
396 oop copy_to_survivor_space_with_undo(ParScanThreadState* par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
397 oop obj, size_t obj_sz, markOop m);
a61af66fc99e Initial load
duke
parents:
diff changeset
398
534
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
399 // in support of testing overflow code
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
400 NOT_PRODUCT(int _overflow_counter;)
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
401 NOT_PRODUCT(bool should_simulate_overflow();)
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
402
679
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
403 // Accessor for overflow list
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
404 oop overflow_list() { return _overflow_list; }
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
405
0
a61af66fc99e Initial load
duke
parents:
diff changeset
406 // 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
407 void push_on_overflow_list(oop from_space_obj, ParScanThreadState* par_scan_state);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
408
a61af66fc99e Initial load
duke
parents:
diff changeset
409 // 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
410 // 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
411 // available space on "work_q" is used.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
412 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
413 bool take_from_overflow_list_work(ParScanThreadState* par_scan_state);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
414
a61af66fc99e Initial load
duke
parents:
diff changeset
415 // The task queues to be used by parallel GC threads.
a61af66fc99e Initial load
duke
parents:
diff changeset
416 ObjToScanQueueSet* task_queues() {
a61af66fc99e Initial load
duke
parents:
diff changeset
417 return _task_queues;
a61af66fc99e Initial load
duke
parents:
diff changeset
418 }
a61af66fc99e Initial load
duke
parents:
diff changeset
419
a61af66fc99e Initial load
duke
parents:
diff changeset
420 PLABStats* plab_stats() {
a61af66fc99e Initial load
duke
parents:
diff changeset
421 return &_plab_stats;
a61af66fc99e Initial load
duke
parents:
diff changeset
422 }
a61af66fc99e Initial load
duke
parents:
diff changeset
423
a61af66fc99e Initial load
duke
parents:
diff changeset
424 size_t desired_plab_sz() {
a61af66fc99e Initial load
duke
parents:
diff changeset
425 return _plab_stats.desired_plab_sz();
a61af66fc99e Initial load
duke
parents:
diff changeset
426 }
a61af66fc99e Initial load
duke
parents:
diff changeset
427
a61af66fc99e Initial load
duke
parents:
diff changeset
428 static oop real_forwardee(oop obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
429
a61af66fc99e Initial load
duke
parents:
diff changeset
430 DEBUG_ONLY(static bool is_legal_forward_ptr(oop p);)
a61af66fc99e Initial load
duke
parents:
diff changeset
431 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
432
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
433 #endif // SHARE_VM_GC_IMPLEMENTATION_PARNEW_PARNEWGENERATION_HPP