144 // Maximum region size; we don't go higher than that. There's a good
145 // reason for having an upper bound. We don't want regions to get too
146 // large, otherwise cleanup's effectiveness would decrease as there
147 // will be fewer opportunities to find totally empty regions after
148 // marking.
149 #define MAX_REGION_SIZE ( 32 * 1024 * 1024 )
150
151 // The automatic region size calculation will try to have around this
152 // many regions in the heap (based on the min heap size).
153 #define TARGET_REGION_NUMBER 2048
154
155 size_t HeapRegion::max_region_size() {
156 return (size_t)MAX_REGION_SIZE;
157 }
158
159 void HeapRegion::setup_heap_region_size(size_t initial_heap_size, size_t max_heap_size) {
160 uintx region_size = G1HeapRegionSize;
161 if (FLAG_IS_DEFAULT(G1HeapRegionSize)) {
162 size_t average_heap_size = (initial_heap_size + max_heap_size) / 2;
163 region_size = MAX2(average_heap_size / TARGET_REGION_NUMBER,
164 (uintx) MIN_REGION_SIZE);
165 }
166
167 int region_size_log = log2_long((jlong) region_size);
168 // Recalculate the region size to make sure it's a power of
169 // 2. This means that region_size is the largest power of 2 that's
170 // <= what we've calculated so far.
171 region_size = ((uintx)1 << region_size_log);
172
173 // Now make sure that we don't go over or under our limits.
174 if (region_size < MIN_REGION_SIZE) {
175 region_size = MIN_REGION_SIZE;
176 } else if (region_size > MAX_REGION_SIZE) {
177 region_size = MAX_REGION_SIZE;
178 }
179
180 // And recalculate the log.
181 region_size_log = log2_long((jlong) region_size);
182
183 // Now, set up the globals.
184 guarantee(LogOfHRGrainBytes == 0, "we should only set it once");
|
144 // Maximum region size; we don't go higher than that. There's a good
145 // reason for having an upper bound. We don't want regions to get too
146 // large, otherwise cleanup's effectiveness would decrease as there
147 // will be fewer opportunities to find totally empty regions after
148 // marking.
149 #define MAX_REGION_SIZE ( 32 * 1024 * 1024 )
150
151 // The automatic region size calculation will try to have around this
152 // many regions in the heap (based on the min heap size).
153 #define TARGET_REGION_NUMBER 2048
154
155 size_t HeapRegion::max_region_size() {
156 return (size_t)MAX_REGION_SIZE;
157 }
158
159 void HeapRegion::setup_heap_region_size(size_t initial_heap_size, size_t max_heap_size) {
160 uintx region_size = G1HeapRegionSize;
161 if (FLAG_IS_DEFAULT(G1HeapRegionSize)) {
162 size_t average_heap_size = (initial_heap_size + max_heap_size) / 2;
163 region_size = MAX2(average_heap_size / TARGET_REGION_NUMBER,
164 (size_t) MIN_REGION_SIZE);
165 }
166
167 int region_size_log = log2_long((jlong) region_size);
168 // Recalculate the region size to make sure it's a power of
169 // 2. This means that region_size is the largest power of 2 that's
170 // <= what we've calculated so far.
171 region_size = ((uintx)1 << region_size_log);
172
173 // Now make sure that we don't go over or under our limits.
174 if (region_size < MIN_REGION_SIZE) {
175 region_size = MIN_REGION_SIZE;
176 } else if (region_size > MAX_REGION_SIZE) {
177 region_size = MAX_REGION_SIZE;
178 }
179
180 // And recalculate the log.
181 region_size_log = log2_long((jlong) region_size);
182
183 // Now, set up the globals.
184 guarantee(LogOfHRGrainBytes == 0, "we should only set it once");
|