Mercurial > hg > graal-jvmci-8
annotate src/share/vm/memory/collectorPolicy.hpp @ 3772:6747fd0512e0
7004681: G1: Extend marking verification to Full GCs
Summary: Perform a heap verification after the first phase of G1's full GC using objects' mark words to determine liveness. The third parameter of the heap verification routines, which was used in G1 to determine which marking bitmap to use in liveness calculations, has been changed from a boolean to an enum with values defined for using the mark word, and the 'prev' and 'next' bitmaps.
Reviewed-by: tonyp, ysr
author | johnc |
---|---|
date | Tue, 14 Jun 2011 11:01:10 -0700 |
parents | f95d63e2154a |
children | c9ca3f51cf41 |
rev | line source |
---|---|
0 | 1 /* |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1387
diff
changeset
|
2 * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1387
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1387
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:
1387
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_MEMORY_COLLECTORPOLICY_HPP |
26 #define SHARE_VM_MEMORY_COLLECTORPOLICY_HPP | |
27 | |
28 #include "memory/barrierSet.hpp" | |
29 #include "memory/genRemSet.hpp" | |
30 #include "memory/permGen.hpp" | |
31 | |
0 | 32 // This class (or more correctly, subtypes of this class) |
33 // are used to define global garbage collector attributes. | |
34 // This includes initialization of generations and any other | |
35 // shared resources they may need. | |
36 // | |
37 // In general, all flag adjustment and validation should be | |
38 // done in initialize_flags(), which is called prior to | |
39 // initialize_size_info(). | |
40 // | |
41 // This class is not fully developed yet. As more collector(s) | |
42 // are added, it is expected that we will come across further | |
43 // behavior that requires global attention. The correct place | |
44 // to deal with those issues is this class. | |
45 | |
46 // Forward declarations. | |
47 class GenCollectorPolicy; | |
48 class TwoGenerationCollectorPolicy; | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
49 class AdaptiveSizePolicy; |
0 | 50 #ifndef SERIALGC |
51 class ConcurrentMarkSweepPolicy; | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
52 class G1CollectorPolicy; |
0 | 53 #endif // SERIALGC |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
54 |
0 | 55 class GCPolicyCounters; |
56 class PermanentGenerationSpec; | |
57 class MarkSweepPolicy; | |
58 | |
59 class CollectorPolicy : public CHeapObj { | |
60 protected: | |
61 PermanentGenerationSpec *_permanent_generation; | |
62 GCPolicyCounters* _gc_policy_counters; | |
63 | |
64 // Requires that the concrete subclass sets the alignment constraints | |
65 // before calling. | |
66 virtual void initialize_flags(); | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
67 virtual void initialize_size_info(); |
0 | 68 // Initialize "_permanent_generation" to a spec for the given kind of |
69 // Perm Gen. | |
70 void initialize_perm_generation(PermGen::Name pgnm); | |
71 | |
72 size_t _initial_heap_byte_size; | |
73 size_t _max_heap_byte_size; | |
74 size_t _min_heap_byte_size; | |
75 | |
76 size_t _min_alignment; | |
77 size_t _max_alignment; | |
78 | |
1387
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
79 // The sizing of the heap are controlled by a sizing policy. |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
80 AdaptiveSizePolicy* _size_policy; |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
81 |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
82 // Set to true when policy wants soft refs cleared. |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
83 // Reset to false by gc after it clears all soft refs. |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
84 bool _should_clear_all_soft_refs; |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
85 // Set to true by the GC if the just-completed gc cleared all |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
86 // softrefs. This is set to true whenever a gc clears all softrefs, and |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
87 // set to false each time gc returns to the mutator. For example, in the |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
88 // ParallelScavengeHeap case the latter would be done toward the end of |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
89 // mem_allocate() where it returns op.result() |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
90 bool _all_soft_refs_clear; |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
91 |
0 | 92 CollectorPolicy() : |
93 _min_alignment(1), | |
94 _max_alignment(1), | |
95 _initial_heap_byte_size(0), | |
96 _max_heap_byte_size(0), | |
1387
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
97 _min_heap_byte_size(0), |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
98 _size_policy(NULL), |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
99 _should_clear_all_soft_refs(false), |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
100 _all_soft_refs_clear(false) |
0 | 101 {} |
102 | |
103 public: | |
104 void set_min_alignment(size_t align) { _min_alignment = align; } | |
105 size_t min_alignment() { return _min_alignment; } | |
106 void set_max_alignment(size_t align) { _max_alignment = align; } | |
107 size_t max_alignment() { return _max_alignment; } | |
108 | |
109 size_t initial_heap_byte_size() { return _initial_heap_byte_size; } | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
110 void set_initial_heap_byte_size(size_t v) { _initial_heap_byte_size = v; } |
0 | 111 size_t max_heap_byte_size() { return _max_heap_byte_size; } |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
112 void set_max_heap_byte_size(size_t v) { _max_heap_byte_size = v; } |
0 | 113 size_t min_heap_byte_size() { return _min_heap_byte_size; } |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
114 void set_min_heap_byte_size(size_t v) { _min_heap_byte_size = v; } |
0 | 115 |
116 enum Name { | |
117 CollectorPolicyKind, | |
118 TwoGenerationCollectorPolicyKind, | |
119 ConcurrentMarkSweepPolicyKind, | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
120 ASConcurrentMarkSweepPolicyKind, |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
121 G1CollectorPolicyKind |
0 | 122 }; |
123 | |
1387
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
124 AdaptiveSizePolicy* size_policy() { return _size_policy; } |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
125 bool should_clear_all_soft_refs() { return _should_clear_all_soft_refs; } |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
126 void set_should_clear_all_soft_refs(bool v) { _should_clear_all_soft_refs = v; } |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
127 // Returns the current value of _should_clear_all_soft_refs. |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
128 // _should_clear_all_soft_refs is set to false as a side effect. |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
129 bool use_should_clear_all_soft_refs(bool v); |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
130 bool all_soft_refs_clear() { return _all_soft_refs_clear; } |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
131 void set_all_soft_refs_clear(bool v) { _all_soft_refs_clear = v; } |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
132 |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
133 // Called by the GC after Soft Refs have been cleared to indicate |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
134 // that the request in _should_clear_all_soft_refs has been fulfilled. |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
135 void cleared_all_soft_refs(); |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
136 |
0 | 137 // Identification methods. |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
138 virtual GenCollectorPolicy* as_generation_policy() { return NULL; } |
0 | 139 virtual TwoGenerationCollectorPolicy* as_two_generation_policy() { return NULL; } |
140 virtual MarkSweepPolicy* as_mark_sweep_policy() { return NULL; } | |
141 #ifndef SERIALGC | |
142 virtual ConcurrentMarkSweepPolicy* as_concurrent_mark_sweep_policy() { return NULL; } | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
143 virtual G1CollectorPolicy* as_g1_policy() { return NULL; } |
0 | 144 #endif // SERIALGC |
145 // Note that these are not virtual. | |
146 bool is_generation_policy() { return as_generation_policy() != NULL; } | |
147 bool is_two_generation_policy() { return as_two_generation_policy() != NULL; } | |
148 bool is_mark_sweep_policy() { return as_mark_sweep_policy() != NULL; } | |
149 #ifndef SERIALGC | |
150 bool is_concurrent_mark_sweep_policy() { return as_concurrent_mark_sweep_policy() != NULL; } | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
151 bool is_g1_policy() { return as_g1_policy() != NULL; } |
0 | 152 #else // SERIALGC |
153 bool is_concurrent_mark_sweep_policy() { return false; } | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
154 bool is_g1_policy() { return false; } |
0 | 155 #endif // SERIALGC |
156 | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
157 |
0 | 158 virtual PermanentGenerationSpec *permanent_generation() { |
159 assert(_permanent_generation != NULL, "Sanity check"); | |
160 return _permanent_generation; | |
161 } | |
162 | |
163 virtual BarrierSet::Name barrier_set_name() = 0; | |
164 virtual GenRemSet::Name rem_set_name() = 0; | |
165 | |
166 // Create the remembered set (to cover the given reserved region, | |
167 // allowing breaking up into at most "max_covered_regions"). | |
168 virtual GenRemSet* create_rem_set(MemRegion reserved, | |
169 int max_covered_regions); | |
170 | |
171 // This method controls how a collector satisfies a request | |
172 // for a block of memory. "gc_time_limit_was_exceeded" will | |
173 // be set to true if the adaptive size policy determine that | |
174 // an excessive amount of time is being spent doing collections | |
175 // and caused a NULL to be returned. If a NULL is not returned, | |
176 // "gc_time_limit_was_exceeded" has an undefined meaning. | |
177 virtual HeapWord* mem_allocate_work(size_t size, | |
178 bool is_tlab, | |
179 bool* gc_overhead_limit_was_exceeded) = 0; | |
180 | |
181 // This method controls how a collector handles one or more | |
182 // of its generations being fully allocated. | |
183 virtual HeapWord *satisfy_failed_allocation(size_t size, bool is_tlab) = 0; | |
184 // Performace Counter support | |
185 GCPolicyCounters* counters() { return _gc_policy_counters; } | |
186 | |
187 // Create the jstat counters for the GC policy. By default, policy's | |
188 // don't have associated counters, and we complain if this is invoked. | |
189 virtual void initialize_gc_policy_counters() { | |
190 ShouldNotReachHere(); | |
191 } | |
192 | |
193 virtual CollectorPolicy::Name kind() { | |
194 return CollectorPolicy::CollectorPolicyKind; | |
195 } | |
196 | |
197 // Returns true if a collector has eden space with soft end. | |
198 virtual bool has_soft_ended_eden() { | |
199 return false; | |
200 } | |
201 | |
202 }; | |
203 | |
1387
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
204 class ClearedAllSoftRefs : public StackObj { |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
205 bool _clear_all_soft_refs; |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
206 CollectorPolicy* _collector_policy; |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
207 public: |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
208 ClearedAllSoftRefs(bool clear_all_soft_refs, |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
209 CollectorPolicy* collector_policy) : |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
210 _clear_all_soft_refs(clear_all_soft_refs), |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
211 _collector_policy(collector_policy) {} |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
212 |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
213 ~ClearedAllSoftRefs() { |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
214 if (_clear_all_soft_refs) { |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
215 _collector_policy->cleared_all_soft_refs(); |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
216 } |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
217 } |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
218 }; |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
219 |
0 | 220 class GenCollectorPolicy : public CollectorPolicy { |
221 protected: | |
222 size_t _min_gen0_size; | |
223 size_t _initial_gen0_size; | |
224 size_t _max_gen0_size; | |
225 | |
226 GenerationSpec **_generations; | |
227 | |
228 // Return true if an allocation should be attempted in the older | |
229 // generation if it fails in the younger generation. Return | |
230 // false, otherwise. | |
231 virtual bool should_try_older_generation_allocation(size_t word_size) const; | |
232 | |
233 void initialize_flags(); | |
234 void initialize_size_info(); | |
235 | |
236 // Try to allocate space by expanding the heap. | |
237 virtual HeapWord* expand_heap_and_allocate(size_t size, bool is_tlab); | |
238 | |
239 // compute max heap alignment | |
240 size_t compute_max_alignment(); | |
241 | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
242 // Scale the base_size by NewRation according to |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
243 // result = base_size / (NewRatio + 1) |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
244 // and align by min_alignment() |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
245 size_t scale_by_NewRatio_aligned(size_t base_size); |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
246 |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
247 // Bound the value by the given maximum minus the |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
248 // min_alignment. |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
249 size_t bound_minus_alignment(size_t desired_size, size_t maximum_size); |
0 | 250 |
251 public: | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
252 // Accessors |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
253 size_t min_gen0_size() { return _min_gen0_size; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
254 void set_min_gen0_size(size_t v) { _min_gen0_size = v; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
255 size_t initial_gen0_size() { return _initial_gen0_size; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
256 void set_initial_gen0_size(size_t v) { _initial_gen0_size = v; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
257 size_t max_gen0_size() { return _max_gen0_size; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
258 void set_max_gen0_size(size_t v) { _max_gen0_size = v; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
259 |
0 | 260 virtual int number_of_generations() = 0; |
261 | |
262 virtual GenerationSpec **generations() { | |
263 assert(_generations != NULL, "Sanity check"); | |
264 return _generations; | |
265 } | |
266 | |
267 virtual GenCollectorPolicy* as_generation_policy() { return this; } | |
268 | |
269 virtual void initialize_generations() = 0; | |
270 | |
271 virtual void initialize_all() { | |
272 initialize_flags(); | |
273 initialize_size_info(); | |
274 initialize_generations(); | |
275 } | |
276 | |
277 HeapWord* mem_allocate_work(size_t size, | |
278 bool is_tlab, | |
279 bool* gc_overhead_limit_was_exceeded); | |
280 | |
281 HeapWord *satisfy_failed_allocation(size_t size, bool is_tlab); | |
282 | |
283 // The size that defines a "large array". | |
284 virtual size_t large_typearray_limit(); | |
285 | |
286 // Adaptive size policy | |
287 virtual void initialize_size_policy(size_t init_eden_size, | |
288 size_t init_promo_size, | |
289 size_t init_survivor_size); | |
290 }; | |
291 | |
292 // All of hotspot's current collectors are subtypes of this | |
293 // class. Currently, these collectors all use the same gen[0], | |
294 // but have different gen[1] types. If we add another subtype | |
295 // of CollectorPolicy, this class should be broken out into | |
296 // its own file. | |
297 | |
298 class TwoGenerationCollectorPolicy : public GenCollectorPolicy { | |
299 protected: | |
300 size_t _min_gen1_size; | |
301 size_t _initial_gen1_size; | |
302 size_t _max_gen1_size; | |
303 | |
304 void initialize_flags(); | |
305 void initialize_size_info(); | |
306 void initialize_generations() { ShouldNotReachHere(); } | |
307 | |
308 public: | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
309 // Accessors |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
310 size_t min_gen1_size() { return _min_gen1_size; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
311 void set_min_gen1_size(size_t v) { _min_gen1_size = v; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
312 size_t initial_gen1_size() { return _initial_gen1_size; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
313 void set_initial_gen1_size(size_t v) { _initial_gen1_size = v; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
314 size_t max_gen1_size() { return _max_gen1_size; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
315 void set_max_gen1_size(size_t v) { _max_gen1_size = v; } |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
316 |
0 | 317 // Inherited methods |
318 TwoGenerationCollectorPolicy* as_two_generation_policy() { return this; } | |
319 | |
320 int number_of_generations() { return 2; } | |
321 BarrierSet::Name barrier_set_name() { return BarrierSet::CardTableModRef; } | |
322 GenRemSet::Name rem_set_name() { return GenRemSet::CardTable; } | |
323 | |
324 virtual CollectorPolicy::Name kind() { | |
325 return CollectorPolicy::TwoGenerationCollectorPolicyKind; | |
326 } | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
327 |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
328 // Returns true is gen0 sizes were adjusted |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
329 bool adjust_gen0_sizes(size_t* gen0_size_ptr, size_t* gen1_size_ptr, |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
330 size_t heap_size, size_t min_gen1_size); |
0 | 331 }; |
332 | |
333 class MarkSweepPolicy : public TwoGenerationCollectorPolicy { | |
334 protected: | |
335 void initialize_generations(); | |
336 | |
337 public: | |
338 MarkSweepPolicy(); | |
339 | |
340 MarkSweepPolicy* as_mark_sweep_policy() { return this; } | |
341 | |
342 void initialize_gc_policy_counters(); | |
343 }; | |
1972 | 344 |
345 #endif // SHARE_VM_MEMORY_COLLECTORPOLICY_HPP |