annotate src/share/vm/gc_implementation/parNew/parNewGeneration.hpp @ 4155:394404b2d9bd

Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
author Doug Simon <doug.simon@oracle.com>
date Wed, 21 Dec 2011 11:25:27 +0100
parents bca17e38de00
children 441e946dc1af
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);
4095
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 1972
diff changeset
243
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 1972
diff changeset
244 // Reset the terminator in ParScanThreadStateSet for
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 1972
diff changeset
245 // "active_workers" threads.
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 1972
diff changeset
246 virtual void set_for_termination(int active_workers);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
247 };
a61af66fc99e Initial load
duke
parents:
diff changeset
248
a61af66fc99e Initial load
duke
parents:
diff changeset
249 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
250 protected:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
251 template <class T> void do_oop_work(T* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
252 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
253 KeepAliveClosure(ScanWeakRefClosure* cl);
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
254 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
255 virtual void do_oop(narrowOop* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
256 };
a61af66fc99e Initial load
duke
parents:
diff changeset
257
a61af66fc99e Initial load
duke
parents:
diff changeset
258 class EvacuateFollowersClosureGeneral: public VoidClosure {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
259 private:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
260 GenCollectedHeap* _gch;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
261 int _level;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
262 OopsInGenClosure* _scan_cur_or_nonheap;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
263 OopsInGenClosure* _scan_older;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
264 public:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
265 EvacuateFollowersClosureGeneral(GenCollectedHeap* gch, int level,
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
266 OopsInGenClosure* cur,
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
267 OopsInGenClosure* older);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
268 virtual void do_void();
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 // Closure for scanning ParNewGeneration.
a61af66fc99e Initial load
duke
parents:
diff changeset
272 // Same as ScanClosure, except does parallel GC barrier.
a61af66fc99e Initial load
duke
parents:
diff changeset
273 class ScanClosureWithParBarrier: public ScanClosure {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
274 protected:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
275 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
276 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
277 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
278 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
279 virtual void do_oop(narrowOop* p);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
280 };
a61af66fc99e Initial load
duke
parents:
diff changeset
281
a61af66fc99e Initial load
duke
parents:
diff changeset
282 // Implements AbstractRefProcTaskExecutor for ParNew.
a61af66fc99e Initial load
duke
parents:
diff changeset
283 class ParNewRefProcTaskExecutor: public AbstractRefProcTaskExecutor {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
284 private:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
285 ParNewGeneration& _generation;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
286 ParScanThreadStateSet& _state_set;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
287 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
288 ParNewRefProcTaskExecutor(ParNewGeneration& generation,
a61af66fc99e Initial load
duke
parents:
diff changeset
289 ParScanThreadStateSet& state_set)
a61af66fc99e Initial load
duke
parents:
diff changeset
290 : _generation(generation), _state_set(state_set)
a61af66fc99e Initial load
duke
parents:
diff changeset
291 { }
a61af66fc99e Initial load
duke
parents:
diff changeset
292
a61af66fc99e Initial load
duke
parents:
diff changeset
293 // Executes a task using worker threads.
a61af66fc99e Initial load
duke
parents:
diff changeset
294 virtual void execute(ProcessTask& task);
a61af66fc99e Initial load
duke
parents:
diff changeset
295 virtual void execute(EnqueueTask& task);
a61af66fc99e Initial load
duke
parents:
diff changeset
296 // Switch to single threaded mode.
a61af66fc99e Initial load
duke
parents:
diff changeset
297 virtual void set_single_threaded_mode();
a61af66fc99e Initial load
duke
parents:
diff changeset
298 };
a61af66fc99e Initial load
duke
parents:
diff changeset
299
a61af66fc99e Initial load
duke
parents:
diff changeset
300
a61af66fc99e Initial load
duke
parents:
diff changeset
301 // A Generation that does parallel young-gen collection.
a61af66fc99e Initial load
duke
parents:
diff changeset
302
a61af66fc99e Initial load
duke
parents:
diff changeset
303 class ParNewGeneration: public DefNewGeneration {
a61af66fc99e Initial load
duke
parents:
diff changeset
304 friend class ParNewGenTask;
a61af66fc99e Initial load
duke
parents:
diff changeset
305 friend class ParNewRefProcTask;
a61af66fc99e Initial load
duke
parents:
diff changeset
306 friend class ParNewRefProcTaskExecutor;
a61af66fc99e Initial load
duke
parents:
diff changeset
307 friend class ParScanThreadStateSet;
534
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
308 friend class ParEvacuateFollowersClosure;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
309
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
310 private:
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
311 // The per-worker-thread work queues
0
a61af66fc99e Initial load
duke
parents:
diff changeset
312 ObjToScanQueueSet* _task_queues;
a61af66fc99e Initial load
duke
parents:
diff changeset
313
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
314 // Per-worker-thread local overflow stacks
1836
894b1d7c7e01 6423256: GC stacks should use a better data structure
jcoomes
parents: 1833
diff changeset
315 Stack<oop>* _overflow_stacks;
695
becb17ad5e51 6824570: ParNew: Fix memory leak introduced in 6819891
ysr
parents: 679
diff changeset
316
0
a61af66fc99e Initial load
duke
parents:
diff changeset
317 // Desired size of survivor space plab's
a61af66fc99e Initial load
duke
parents:
diff changeset
318 PLABStats _plab_stats;
a61af66fc99e Initial load
duke
parents:
diff changeset
319
a61af66fc99e Initial load
duke
parents:
diff changeset
320 // A list of from-space images of to-be-scanned objects, threaded through
a61af66fc99e Initial load
duke
parents:
diff changeset
321 // klass-pointers (klass information already copied to the forwarded
a61af66fc99e Initial load
duke
parents:
diff changeset
322 // image.) Manipulated with CAS.
a61af66fc99e Initial load
duke
parents:
diff changeset
323 oop _overflow_list;
534
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
324 NOT_PRODUCT(ssize_t _num_par_pushes;)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
325
a61af66fc99e Initial load
duke
parents:
diff changeset
326 // If true, older generation does not support promotion undo, so avoid.
a61af66fc99e Initial load
duke
parents:
diff changeset
327 static bool _avoid_promotion_undo;
a61af66fc99e Initial load
duke
parents:
diff changeset
328
a61af66fc99e Initial load
duke
parents:
diff changeset
329 // This closure is used by the reference processor to filter out
a61af66fc99e Initial load
duke
parents:
diff changeset
330 // references to live referent.
a61af66fc99e Initial load
duke
parents:
diff changeset
331 DefNewGeneration::IsAliveClosure _is_alive_closure;
a61af66fc99e Initial load
duke
parents:
diff changeset
332
a61af66fc99e Initial load
duke
parents:
diff changeset
333 static oop real_forwardee_slow(oop obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
334 static void waste_some_time();
a61af66fc99e Initial load
duke
parents:
diff changeset
335
a61af66fc99e Initial load
duke
parents:
diff changeset
336 // Preserve the mark of "obj", if necessary, in preparation for its mark
a61af66fc99e Initial load
duke
parents:
diff changeset
337 // word being overwritten with a self-forwarding-pointer.
a61af66fc99e Initial load
duke
parents:
diff changeset
338 void preserve_mark_if_necessary(oop obj, markOop m);
a61af66fc99e Initial load
duke
parents:
diff changeset
339
a61af66fc99e Initial load
duke
parents:
diff changeset
340 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
341
a61af66fc99e Initial load
duke
parents:
diff changeset
342 bool _survivor_overflow;
a61af66fc99e Initial load
duke
parents:
diff changeset
343
a61af66fc99e Initial load
duke
parents:
diff changeset
344 bool avoid_promotion_undo() { return _avoid_promotion_undo; }
a61af66fc99e Initial load
duke
parents:
diff changeset
345 void set_avoid_promotion_undo(bool v) { _avoid_promotion_undo = v; }
a61af66fc99e Initial load
duke
parents:
diff changeset
346
a61af66fc99e Initial load
duke
parents:
diff changeset
347 bool survivor_overflow() { return _survivor_overflow; }
a61af66fc99e Initial load
duke
parents:
diff changeset
348 void set_survivor_overflow(bool v) { _survivor_overflow = v; }
a61af66fc99e Initial load
duke
parents:
diff changeset
349
a61af66fc99e Initial load
duke
parents:
diff changeset
350 // Adjust the tenuring threshold. See the implementation for
a61af66fc99e Initial load
duke
parents:
diff changeset
351 // the details of the policy.
a61af66fc99e Initial load
duke
parents:
diff changeset
352 virtual void adjust_desired_tenuring_threshold();
a61af66fc99e Initial load
duke
parents:
diff changeset
353
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
354 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
355 ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level);
a61af66fc99e Initial load
duke
parents:
diff changeset
356
a61af66fc99e Initial load
duke
parents:
diff changeset
357 ~ParNewGeneration() {
a61af66fc99e Initial load
duke
parents:
diff changeset
358 for (uint i = 0; i < ParallelGCThreads; i++)
a61af66fc99e Initial load
duke
parents:
diff changeset
359 delete _task_queues->queue(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
360
a61af66fc99e Initial load
duke
parents:
diff changeset
361 delete _task_queues;
a61af66fc99e Initial load
duke
parents:
diff changeset
362 }
a61af66fc99e Initial load
duke
parents:
diff changeset
363
1833
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1710
diff changeset
364 static bool in_use();
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1710
diff changeset
365
0
a61af66fc99e Initial load
duke
parents:
diff changeset
366 virtual void ref_processor_init();
a61af66fc99e Initial load
duke
parents:
diff changeset
367 virtual Generation::Name kind() { return Generation::ParNew; }
a61af66fc99e Initial load
duke
parents:
diff changeset
368 virtual const char* name() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
369 virtual const char* short_name() const { return "ParNew"; }
a61af66fc99e Initial load
duke
parents:
diff changeset
370
a61af66fc99e Initial load
duke
parents:
diff changeset
371 // override
a61af66fc99e Initial load
duke
parents:
diff changeset
372 virtual bool refs_discovery_is_mt() const {
a61af66fc99e Initial load
duke
parents:
diff changeset
373 assert(UseParNewGC, "ParNewGeneration only when UseParNewGC");
a61af66fc99e Initial load
duke
parents:
diff changeset
374 return ParallelGCThreads > 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
375 }
a61af66fc99e Initial load
duke
parents:
diff changeset
376
a61af66fc99e Initial load
duke
parents:
diff changeset
377 // Make the collection virtual.
a61af66fc99e Initial load
duke
parents:
diff changeset
378 virtual void collect(bool full,
a61af66fc99e Initial load
duke
parents:
diff changeset
379 bool clear_all_soft_refs,
a61af66fc99e Initial load
duke
parents:
diff changeset
380 size_t size,
a61af66fc99e Initial load
duke
parents:
diff changeset
381 bool is_tlab);
a61af66fc99e Initial load
duke
parents:
diff changeset
382
a61af66fc99e Initial load
duke
parents:
diff changeset
383 // This needs to be visible to the closure function.
a61af66fc99e Initial load
duke
parents:
diff changeset
384 // "obj" is the object to be copied, "m" is a recent value of its mark
a61af66fc99e Initial load
duke
parents:
diff changeset
385 // that must not contain a forwarding pointer (though one might be
a61af66fc99e Initial load
duke
parents:
diff changeset
386 // inserted in "obj"s mark word by a parallel thread).
a61af66fc99e Initial load
duke
parents:
diff changeset
387 inline oop copy_to_survivor_space(ParScanThreadState* par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
388 oop obj, size_t obj_sz, markOop m) {
a61af66fc99e Initial load
duke
parents:
diff changeset
389 if (_avoid_promotion_undo) {
a61af66fc99e Initial load
duke
parents:
diff changeset
390 return copy_to_survivor_space_avoiding_promotion_undo(par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
391 obj, obj_sz, m);
a61af66fc99e Initial load
duke
parents:
diff changeset
392 }
a61af66fc99e Initial load
duke
parents:
diff changeset
393
a61af66fc99e Initial load
duke
parents:
diff changeset
394 return copy_to_survivor_space_with_undo(par_scan_state, obj, obj_sz, m);
a61af66fc99e Initial load
duke
parents:
diff changeset
395 }
a61af66fc99e Initial load
duke
parents:
diff changeset
396
a61af66fc99e Initial load
duke
parents:
diff changeset
397 oop copy_to_survivor_space_avoiding_promotion_undo(ParScanThreadState* par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
398 oop obj, size_t obj_sz, markOop m);
a61af66fc99e Initial load
duke
parents:
diff changeset
399
a61af66fc99e Initial load
duke
parents:
diff changeset
400 oop copy_to_survivor_space_with_undo(ParScanThreadState* par_scan_state,
a61af66fc99e Initial load
duke
parents:
diff changeset
401 oop obj, size_t obj_sz, markOop m);
a61af66fc99e Initial load
duke
parents:
diff changeset
402
534
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
403 // in support of testing overflow code
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
404 NOT_PRODUCT(int _overflow_counter;)
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
405 NOT_PRODUCT(bool should_simulate_overflow();)
5cfd8d19e546 6786503: Overflow list performance can be improved
ysr
parents: 196
diff changeset
406
679
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
407 // Accessor for overflow list
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
408 oop overflow_list() { return _overflow_list; }
cea947c8a988 6819891: ParNew: Fix work queue overflow code to deal correctly with +UseCompressedOops
ysr
parents: 579
diff changeset
409
0
a61af66fc99e Initial load
duke
parents:
diff changeset
410 // 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
411 void push_on_overflow_list(oop from_space_obj, ParScanThreadState* par_scan_state);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
412
a61af66fc99e Initial load
duke
parents:
diff changeset
413 // 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
414 // 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
415 // available space on "work_q" is used.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
416 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
417 bool take_from_overflow_list_work(ParScanThreadState* par_scan_state);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
418
a61af66fc99e Initial load
duke
parents:
diff changeset
419 // The task queues to be used by parallel GC threads.
a61af66fc99e Initial load
duke
parents:
diff changeset
420 ObjToScanQueueSet* task_queues() {
a61af66fc99e Initial load
duke
parents:
diff changeset
421 return _task_queues;
a61af66fc99e Initial load
duke
parents:
diff changeset
422 }
a61af66fc99e Initial load
duke
parents:
diff changeset
423
a61af66fc99e Initial load
duke
parents:
diff changeset
424 PLABStats* plab_stats() {
a61af66fc99e Initial load
duke
parents:
diff changeset
425 return &_plab_stats;
a61af66fc99e Initial load
duke
parents:
diff changeset
426 }
a61af66fc99e Initial load
duke
parents:
diff changeset
427
a61af66fc99e Initial load
duke
parents:
diff changeset
428 size_t desired_plab_sz() {
a61af66fc99e Initial load
duke
parents:
diff changeset
429 return _plab_stats.desired_plab_sz();
a61af66fc99e Initial load
duke
parents:
diff changeset
430 }
a61af66fc99e Initial load
duke
parents:
diff changeset
431
a61af66fc99e Initial load
duke
parents:
diff changeset
432 static oop real_forwardee(oop obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
433
a61af66fc99e Initial load
duke
parents:
diff changeset
434 DEBUG_ONLY(static bool is_legal_forward_ptr(oop p);)
a61af66fc99e Initial load
duke
parents:
diff changeset
435 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
436
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1836
diff changeset
437 #endif // SHARE_VM_GC_IMPLEMENTATION_PARNEW_PARNEWGENERATION_HPP