Mercurial > hg > graal-jvmci-8
annotate src/share/vm/memory/collectorPolicy.hpp @ 1721:413ad0331a0c
6977924: Changes for 6975078 produce build error with certain gcc versions
Summary: The changes introduced for 6975078 assign badHeapOopVal to the _allocation field in the ResourceObj class. In 32 bit linux builds with certain versions of gcc this assignment will be flagged as an error while compiling allocation.cpp. In 32 bit builds the constant value badHeapOopVal (which is cast to an intptr_t) is negative. The _allocation field is typed as an unsigned intptr_t and gcc catches this as an error.
Reviewed-by: jcoomes, ysr, phh
author | johnc |
---|---|
date | Wed, 18 Aug 2010 10:59:06 -0700 |
parents | c18cbe5936b8 |
children | f95d63e2154a |
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 | |
25 // This class (or more correctly, subtypes of this class) | |
26 // are used to define global garbage collector attributes. | |
27 // This includes initialization of generations and any other | |
28 // shared resources they may need. | |
29 // | |
30 // In general, all flag adjustment and validation should be | |
31 // done in initialize_flags(), which is called prior to | |
32 // initialize_size_info(). | |
33 // | |
34 // This class is not fully developed yet. As more collector(s) | |
35 // are added, it is expected that we will come across further | |
36 // behavior that requires global attention. The correct place | |
37 // to deal with those issues is this class. | |
38 | |
39 // Forward declarations. | |
40 class GenCollectorPolicy; | |
41 class TwoGenerationCollectorPolicy; | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
42 class AdaptiveSizePolicy; |
0 | 43 #ifndef SERIALGC |
44 class ConcurrentMarkSweepPolicy; | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
45 class G1CollectorPolicy; |
0 | 46 #endif // SERIALGC |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
47 |
0 | 48 class GCPolicyCounters; |
49 class PermanentGenerationSpec; | |
50 class MarkSweepPolicy; | |
51 | |
52 class CollectorPolicy : public CHeapObj { | |
53 protected: | |
54 PermanentGenerationSpec *_permanent_generation; | |
55 GCPolicyCounters* _gc_policy_counters; | |
56 | |
57 // Requires that the concrete subclass sets the alignment constraints | |
58 // before calling. | |
59 virtual void initialize_flags(); | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
60 virtual void initialize_size_info(); |
0 | 61 // Initialize "_permanent_generation" to a spec for the given kind of |
62 // Perm Gen. | |
63 void initialize_perm_generation(PermGen::Name pgnm); | |
64 | |
65 size_t _initial_heap_byte_size; | |
66 size_t _max_heap_byte_size; | |
67 size_t _min_heap_byte_size; | |
68 | |
69 size_t _min_alignment; | |
70 size_t _max_alignment; | |
71 | |
1387
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
72 // 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
|
73 AdaptiveSizePolicy* _size_policy; |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
74 |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
75 // 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
|
76 // 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
|
77 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
|
78 // 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
|
79 // 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
|
80 // 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
|
81 // 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
|
82 // 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
|
83 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
|
84 |
0 | 85 CollectorPolicy() : |
86 _min_alignment(1), | |
87 _max_alignment(1), | |
88 _initial_heap_byte_size(0), | |
89 _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
|
90 _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
|
91 _size_policy(NULL), |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
92 _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
|
93 _all_soft_refs_clear(false) |
0 | 94 {} |
95 | |
96 public: | |
97 void set_min_alignment(size_t align) { _min_alignment = align; } | |
98 size_t min_alignment() { return _min_alignment; } | |
99 void set_max_alignment(size_t align) { _max_alignment = align; } | |
100 size_t max_alignment() { return _max_alignment; } | |
101 | |
102 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
|
103 void set_initial_heap_byte_size(size_t v) { _initial_heap_byte_size = v; } |
0 | 104 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
|
105 void set_max_heap_byte_size(size_t v) { _max_heap_byte_size = v; } |
0 | 106 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
|
107 void set_min_heap_byte_size(size_t v) { _min_heap_byte_size = v; } |
0 | 108 |
109 enum Name { | |
110 CollectorPolicyKind, | |
111 TwoGenerationCollectorPolicyKind, | |
112 ConcurrentMarkSweepPolicyKind, | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
113 ASConcurrentMarkSweepPolicyKind, |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
114 G1CollectorPolicyKind |
0 | 115 }; |
116 | |
1387
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
117 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
|
118 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
|
119 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
|
120 // 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
|
121 // _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
|
122 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
|
123 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
|
124 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
|
125 |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
126 // 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
|
127 // 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
|
128 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
|
129 |
0 | 130 // Identification methods. |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
131 virtual GenCollectorPolicy* as_generation_policy() { return NULL; } |
0 | 132 virtual TwoGenerationCollectorPolicy* as_two_generation_policy() { return NULL; } |
133 virtual MarkSweepPolicy* as_mark_sweep_policy() { return NULL; } | |
134 #ifndef SERIALGC | |
135 virtual ConcurrentMarkSweepPolicy* as_concurrent_mark_sweep_policy() { return NULL; } | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
136 virtual G1CollectorPolicy* as_g1_policy() { return NULL; } |
0 | 137 #endif // SERIALGC |
138 // Note that these are not virtual. | |
139 bool is_generation_policy() { return as_generation_policy() != NULL; } | |
140 bool is_two_generation_policy() { return as_two_generation_policy() != NULL; } | |
141 bool is_mark_sweep_policy() { return as_mark_sweep_policy() != NULL; } | |
142 #ifndef SERIALGC | |
143 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
|
144 bool is_g1_policy() { return as_g1_policy() != NULL; } |
0 | 145 #else // SERIALGC |
146 bool is_concurrent_mark_sweep_policy() { return false; } | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
147 bool is_g1_policy() { return false; } |
0 | 148 #endif // SERIALGC |
149 | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
13
diff
changeset
|
150 |
0 | 151 virtual PermanentGenerationSpec *permanent_generation() { |
152 assert(_permanent_generation != NULL, "Sanity check"); | |
153 return _permanent_generation; | |
154 } | |
155 | |
156 virtual BarrierSet::Name barrier_set_name() = 0; | |
157 virtual GenRemSet::Name rem_set_name() = 0; | |
158 | |
159 // Create the remembered set (to cover the given reserved region, | |
160 // allowing breaking up into at most "max_covered_regions"). | |
161 virtual GenRemSet* create_rem_set(MemRegion reserved, | |
162 int max_covered_regions); | |
163 | |
164 // This method controls how a collector satisfies a request | |
165 // for a block of memory. "gc_time_limit_was_exceeded" will | |
166 // be set to true if the adaptive size policy determine that | |
167 // an excessive amount of time is being spent doing collections | |
168 // and caused a NULL to be returned. If a NULL is not returned, | |
169 // "gc_time_limit_was_exceeded" has an undefined meaning. | |
170 virtual HeapWord* mem_allocate_work(size_t size, | |
171 bool is_tlab, | |
172 bool* gc_overhead_limit_was_exceeded) = 0; | |
173 | |
174 // This method controls how a collector handles one or more | |
175 // of its generations being fully allocated. | |
176 virtual HeapWord *satisfy_failed_allocation(size_t size, bool is_tlab) = 0; | |
177 // Performace Counter support | |
178 GCPolicyCounters* counters() { return _gc_policy_counters; } | |
179 | |
180 // Create the jstat counters for the GC policy. By default, policy's | |
181 // don't have associated counters, and we complain if this is invoked. | |
182 virtual void initialize_gc_policy_counters() { | |
183 ShouldNotReachHere(); | |
184 } | |
185 | |
186 virtual CollectorPolicy::Name kind() { | |
187 return CollectorPolicy::CollectorPolicyKind; | |
188 } | |
189 | |
190 // Returns true if a collector has eden space with soft end. | |
191 virtual bool has_soft_ended_eden() { | |
192 return false; | |
193 } | |
194 | |
195 }; | |
196 | |
1387
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
197 class ClearedAllSoftRefs : public StackObj { |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
198 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
|
199 CollectorPolicy* _collector_policy; |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
200 public: |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
201 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
|
202 CollectorPolicy* collector_policy) : |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
203 _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
|
204 _collector_policy(collector_policy) {} |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
205 |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
206 ~ClearedAllSoftRefs() { |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
207 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
|
208 _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
|
209 } |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
210 } |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
211 }; |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
356
diff
changeset
|
212 |
0 | 213 class GenCollectorPolicy : public CollectorPolicy { |
214 protected: | |
215 size_t _min_gen0_size; | |
216 size_t _initial_gen0_size; | |
217 size_t _max_gen0_size; | |
218 | |
219 GenerationSpec **_generations; | |
220 | |
221 // Return true if an allocation should be attempted in the older | |
222 // generation if it fails in the younger generation. Return | |
223 // false, otherwise. | |
224 virtual bool should_try_older_generation_allocation(size_t word_size) const; | |
225 | |
226 void initialize_flags(); | |
227 void initialize_size_info(); | |
228 | |
229 // Try to allocate space by expanding the heap. | |
230 virtual HeapWord* expand_heap_and_allocate(size_t size, bool is_tlab); | |
231 | |
232 // compute max heap alignment | |
233 size_t compute_max_alignment(); | |
234 | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
235 // 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
|
236 // result = base_size / (NewRatio + 1) |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
237 // and align by min_alignment() |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
238 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
|
239 |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
240 // 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
|
241 // min_alignment. |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
242 size_t bound_minus_alignment(size_t desired_size, size_t maximum_size); |
0 | 243 |
244 public: | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
245 // Accessors |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
246 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
|
247 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
|
248 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
|
249 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
|
250 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
|
251 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
|
252 |
0 | 253 virtual int number_of_generations() = 0; |
254 | |
255 virtual GenerationSpec **generations() { | |
256 assert(_generations != NULL, "Sanity check"); | |
257 return _generations; | |
258 } | |
259 | |
260 virtual GenCollectorPolicy* as_generation_policy() { return this; } | |
261 | |
262 virtual void initialize_generations() = 0; | |
263 | |
264 virtual void initialize_all() { | |
265 initialize_flags(); | |
266 initialize_size_info(); | |
267 initialize_generations(); | |
268 } | |
269 | |
270 HeapWord* mem_allocate_work(size_t size, | |
271 bool is_tlab, | |
272 bool* gc_overhead_limit_was_exceeded); | |
273 | |
274 HeapWord *satisfy_failed_allocation(size_t size, bool is_tlab); | |
275 | |
276 // The size that defines a "large array". | |
277 virtual size_t large_typearray_limit(); | |
278 | |
279 // Adaptive size policy | |
280 virtual void initialize_size_policy(size_t init_eden_size, | |
281 size_t init_promo_size, | |
282 size_t init_survivor_size); | |
283 }; | |
284 | |
285 // All of hotspot's current collectors are subtypes of this | |
286 // class. Currently, these collectors all use the same gen[0], | |
287 // but have different gen[1] types. If we add another subtype | |
288 // of CollectorPolicy, this class should be broken out into | |
289 // its own file. | |
290 | |
291 class TwoGenerationCollectorPolicy : public GenCollectorPolicy { | |
292 protected: | |
293 size_t _min_gen1_size; | |
294 size_t _initial_gen1_size; | |
295 size_t _max_gen1_size; | |
296 | |
297 void initialize_flags(); | |
298 void initialize_size_info(); | |
299 void initialize_generations() { ShouldNotReachHere(); } | |
300 | |
301 public: | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
302 // Accessors |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
303 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
|
304 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
|
305 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
|
306 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
|
307 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
|
308 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
|
309 |
0 | 310 // Inherited methods |
311 TwoGenerationCollectorPolicy* as_two_generation_policy() { return this; } | |
312 | |
313 int number_of_generations() { return 2; } | |
314 BarrierSet::Name barrier_set_name() { return BarrierSet::CardTableModRef; } | |
315 GenRemSet::Name rem_set_name() { return GenRemSet::CardTable; } | |
316 | |
317 virtual CollectorPolicy::Name kind() { | |
318 return CollectorPolicy::TwoGenerationCollectorPolicyKind; | |
319 } | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
320 |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
321 // Returns true is gen0 sizes were adjusted |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
0
diff
changeset
|
322 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
|
323 size_t heap_size, size_t min_gen1_size); |
0 | 324 }; |
325 | |
326 class MarkSweepPolicy : public TwoGenerationCollectorPolicy { | |
327 protected: | |
328 void initialize_generations(); | |
329 | |
330 public: | |
331 MarkSweepPolicy(); | |
332 | |
333 MarkSweepPolicy* as_mark_sweep_policy() { return this; } | |
334 | |
335 void initialize_gc_policy_counters(); | |
336 }; |