58
59 class CollectorPolicy : public CHeapObj<mtGC> {
60 protected:
61 virtual void initialize_alignments() = 0;
62 virtual void initialize_flags();
63 virtual void initialize_size_info();
64
65 DEBUG_ONLY(virtual void assert_flags();)
66 DEBUG_ONLY(virtual void assert_size_info();)
67
68 size_t _initial_heap_byte_size;
69 size_t _max_heap_byte_size;
70 size_t _min_heap_byte_size;
71
72 size_t _space_alignment;
73 size_t _heap_alignment;
74
75 CollectorPolicy();
76
77 public:
78 virtual void initialize_all() {
79 initialize_alignments();
80 initialize_flags();
81 initialize_size_info();
82 }
83
84 // Return maximum heap alignment that may be imposed by the policy.
85 static size_t compute_heap_alignment();
86
87 size_t space_alignment() { return _space_alignment; }
88 size_t heap_alignment() { return _heap_alignment; }
89
90 size_t initial_heap_byte_size() { return _initial_heap_byte_size; }
91 size_t max_heap_byte_size() { return _max_heap_byte_size; }
92 size_t min_heap_byte_size() { return _min_heap_byte_size; }
93 };
94
95 class GenCollectorPolicy : public CollectorPolicy {
96 friend class TestGenCollectorPolicy;
97 friend class VMStructs;
98
99 protected:
100 size_t _min_young_size;
101 size_t _initial_young_size;
102 size_t _max_young_size;
103 size_t _min_old_size;
104 size_t _initial_old_size;
105 size_t _max_old_size;
106
107 // _gen_alignment and _space_alignment will have the same value most of the
108 // time. When using large pages they can differ.
109 size_t _gen_alignment;
110
111 GenerationSpec* _young_gen_spec;
112 GenerationSpec* _old_gen_spec;
113
114 GCPolicyCounters* _gc_policy_counters;
115
116 void initialize_flags();
117 void initialize_size_info();
118
119 DEBUG_ONLY(void assert_flags();)
120 DEBUG_ONLY(void assert_size_info();)
121
122 // Compute max heap alignment.
123 size_t compute_max_alignment();
124
125 // Scale the base_size by NewRatio according to
126 // result = base_size / (NewRatio + 1)
127 // and align by min_alignment()
128 size_t scale_by_NewRatio_aligned(size_t base_size);
129
130 // Bound the value by the given maximum minus the min_alignment.
131 size_t bound_minus_alignment(size_t desired_size, size_t maximum_size);
132
133 public:
134 GenCollectorPolicy();
135
136 // Accessors
137 size_t min_young_size() { return _min_young_size; }
138 size_t initial_young_size() { return _initial_young_size; }
139 size_t max_young_size() { return _max_young_size; }
140 size_t gen_alignment() { return _gen_alignment; }
141 size_t min_old_size() { return _min_old_size; }
142 size_t initial_old_size() { return _initial_old_size; }
143 size_t max_old_size() { return _max_old_size; }
144
145 GenerationSpec* young_gen_spec() const {
146 assert(_young_gen_spec != NULL, "_young_gen_spec should have been initialized");
147 return _young_gen_spec;
148 }
149
150 GenerationSpec* old_gen_spec() const {
151 assert(_old_gen_spec != NULL, "_old_gen_spec should have been initialized");
152 return _old_gen_spec;
153 }
154
155 // Performance Counter support
156 GCPolicyCounters* counters() { return _gc_policy_counters; }
157
158 // Create the jstat counters for the GC policy.
159 virtual void initialize_gc_policy_counters() = 0;
160
161 virtual void initialize_generations() { };
162
163 virtual void initialize_all() {
164 CollectorPolicy::initialize_all();
165 initialize_generations();
166 }
167
168 size_t young_gen_size_lower_bound();
169
170 size_t old_gen_size_lower_bound();
171 };
172
173 class MarkSweepPolicy : public GenCollectorPolicy {
174 protected:
175 void initialize_alignments();
176 void initialize_generations();
177
178 public:
179 MarkSweepPolicy() {}
180
181 void initialize_gc_policy_counters();
182 };
183
184 #endif // SHARE_VM_GC_SHARED_COLLECTORPOLICY_HPP
|
58
59 class CollectorPolicy : public CHeapObj<mtGC> {
60 protected:
61 virtual void initialize_alignments() = 0;
62 virtual void initialize_flags();
63 virtual void initialize_size_info();
64
65 DEBUG_ONLY(virtual void assert_flags();)
66 DEBUG_ONLY(virtual void assert_size_info();)
67
68 size_t _initial_heap_byte_size;
69 size_t _max_heap_byte_size;
70 size_t _min_heap_byte_size;
71
72 size_t _space_alignment;
73 size_t _heap_alignment;
74
75 CollectorPolicy();
76
77 public:
78 void initialize_all() {
79 initialize_alignments();
80 initialize_flags();
81 initialize_size_info();
82 }
83
84 // Return maximum heap alignment that may be imposed by the policy.
85 static size_t compute_heap_alignment();
86
87 size_t space_alignment() { return _space_alignment; }
88 size_t heap_alignment() { return _heap_alignment; }
89
90 size_t initial_heap_byte_size() { return _initial_heap_byte_size; }
91 size_t max_heap_byte_size() { return _max_heap_byte_size; }
92 size_t min_heap_byte_size() { return _min_heap_byte_size; }
93 };
94
95 class GenCollectorPolicy : public CollectorPolicy {
96 friend class TestGenCollectorPolicy;
97 friend class VMStructs;
98
99 protected:
100 size_t _min_young_size;
101 size_t _initial_young_size;
102 size_t _max_young_size;
103 size_t _min_old_size;
104 size_t _initial_old_size;
105 size_t _max_old_size;
106
107 // _gen_alignment and _space_alignment will have the same value most of the
108 // time. When using large pages they can differ.
109 size_t _gen_alignment;
110
111 GCPolicyCounters* _gc_policy_counters;
112
113 void initialize_flags();
114 void initialize_size_info();
115
116 DEBUG_ONLY(void assert_flags();)
117 DEBUG_ONLY(void assert_size_info();)
118
119 // Compute max heap alignment.
120 size_t compute_max_alignment();
121
122 // Scale the base_size by NewRatio according to
123 // result = base_size / (NewRatio + 1)
124 // and align by min_alignment()
125 size_t scale_by_NewRatio_aligned(size_t base_size);
126
127 // Bound the value by the given maximum minus the min_alignment.
128 size_t bound_minus_alignment(size_t desired_size, size_t maximum_size);
129
130 public:
131 GenCollectorPolicy();
132
133 // Accessors
134 size_t min_young_size() { return _min_young_size; }
135 size_t initial_young_size() { return _initial_young_size; }
136 size_t max_young_size() { return _max_young_size; }
137 size_t gen_alignment() { return _gen_alignment; }
138 size_t min_old_size() { return _min_old_size; }
139 size_t initial_old_size() { return _initial_old_size; }
140 size_t max_old_size() { return _max_old_size; }
141
142 // Performance Counter support
143 GCPolicyCounters* counters() { return _gc_policy_counters; }
144
145 // Create the jstat counters for the GC policy.
146 virtual void initialize_gc_policy_counters() = 0;
147
148 size_t young_gen_size_lower_bound();
149
150 size_t old_gen_size_lower_bound();
151 };
152
153 class MarkSweepPolicy : public GenCollectorPolicy {
154 protected:
155 void initialize_alignments();
156
157 public:
158 MarkSweepPolicy() {}
159
160 void initialize_gc_policy_counters();
161 };
162
163 #endif // SHARE_VM_GC_SHARED_COLLECTORPOLICY_HPP
|