283 }
284 }
285
286
287 bool PSYoungGen::resize_generation(size_t eden_size, size_t survivor_size) {
288 const size_t alignment = virtual_space()->alignment();
289 size_t orig_size = virtual_space()->committed_size();
290 bool size_changed = false;
291
292 // There used to be this guarantee there.
293 // guarantee ((eden_size + 2*survivor_size) <= _max_gen_size, "incorrect input arguments");
294 // Code below forces this requirement. In addition the desired eden
295 // size and desired survivor sizes are desired goals and may
296 // exceed the total generation size.
297
298 assert(min_gen_size() <= orig_size && orig_size <= max_size(), "just checking");
299
300 // Adjust new generation size
301 const size_t eden_plus_survivors =
302 align_up(eden_size + 2 * survivor_size, alignment);
303 size_t desired_size = MAX2(MIN2(eden_plus_survivors, max_size()),
304 min_gen_size());
305 assert(desired_size <= max_size(), "just checking");
306
307 if (desired_size > orig_size) {
308 // Grow the generation
309 size_t change = desired_size - orig_size;
310 assert(change % alignment == 0, "just checking");
311 HeapWord* prev_high = (HeapWord*) virtual_space()->high();
312 if (!virtual_space()->expand_by(change)) {
313 return false; // Error if we fail to resize!
314 }
315 if (ZapUnusedHeapArea) {
316 // Mangle newly committed space immediately because it
317 // can be done here more simply that after the new
318 // spaces have been computed.
319 HeapWord* new_high = (HeapWord*) virtual_space()->high();
320 MemRegion mangle_region(prev_high, new_high);
321 SpaceMangler::mangle_region(mangle_region);
322 }
323 size_changed = true;
324 } else if (desired_size < orig_size) {
|
283 }
284 }
285
286
287 bool PSYoungGen::resize_generation(size_t eden_size, size_t survivor_size) {
288 const size_t alignment = virtual_space()->alignment();
289 size_t orig_size = virtual_space()->committed_size();
290 bool size_changed = false;
291
292 // There used to be this guarantee there.
293 // guarantee ((eden_size + 2*survivor_size) <= _max_gen_size, "incorrect input arguments");
294 // Code below forces this requirement. In addition the desired eden
295 // size and desired survivor sizes are desired goals and may
296 // exceed the total generation size.
297
298 assert(min_gen_size() <= orig_size && orig_size <= max_size(), "just checking");
299
300 // Adjust new generation size
301 const size_t eden_plus_survivors =
302 align_up(eden_size + 2 * survivor_size, alignment);
303 size_t desired_size = clamp(eden_plus_survivors, min_gen_size(), max_size());
304 assert(desired_size <= max_size(), "just checking");
305
306 if (desired_size > orig_size) {
307 // Grow the generation
308 size_t change = desired_size - orig_size;
309 assert(change % alignment == 0, "just checking");
310 HeapWord* prev_high = (HeapWord*) virtual_space()->high();
311 if (!virtual_space()->expand_by(change)) {
312 return false; // Error if we fail to resize!
313 }
314 if (ZapUnusedHeapArea) {
315 // Mangle newly committed space immediately because it
316 // can be done here more simply that after the new
317 // spaces have been computed.
318 HeapWord* new_high = (HeapWord*) virtual_space()->high();
319 MemRegion mangle_region(prev_high, new_high);
320 SpaceMangler::mangle_region(mangle_region);
321 }
322 size_changed = true;
323 } else if (desired_size < orig_size) {
|