376
377 size_t old_size = gch->old_gen()->capacity();
378 size_t new_size_before = _virtual_space.committed_size();
379 size_t min_new_size = initial_size();
380 size_t max_new_size = reserved().byte_size();
381 assert(min_new_size <= new_size_before &&
382 new_size_before <= max_new_size,
383 "just checking");
384 // All space sizes must be multiples of Generation::GenGrain.
385 size_t alignment = Generation::GenGrain;
386
387 int threads_count = 0;
388 size_t thread_increase_size = 0;
389
390 size_t new_size_candidate = old_size / NewRatio;
391 // Compute desired new generation size based on NewRatio and NewSizeThreadIncrease
392 // and reverts to previous value if any overflow happens
393 size_t desired_new_size = adjust_for_thread_increase(new_size_candidate, new_size_before, alignment);
394
395 // Adjust new generation size
396 desired_new_size = MAX2(MIN2(desired_new_size, max_new_size), min_new_size);
397 assert(desired_new_size <= max_new_size, "just checking");
398
399 bool changed = false;
400 if (desired_new_size > new_size_before) {
401 size_t change = desired_new_size - new_size_before;
402 assert(change % alignment == 0, "just checking");
403 if (expand(change)) {
404 changed = true;
405 }
406 // If the heap failed to expand to the desired size,
407 // "changed" will be false. If the expansion failed
408 // (and at this point it was expected to succeed),
409 // ignore the failure (leaving "changed" as false).
410 }
411 if (desired_new_size < new_size_before && eden()->is_empty()) {
412 // bail out of shrinking if objects in eden
413 size_t change = new_size_before - desired_new_size;
414 assert(change % alignment == 0, "just checking");
415 _virtual_space.shrink_by(change);
416 changed = true;
|
376
377 size_t old_size = gch->old_gen()->capacity();
378 size_t new_size_before = _virtual_space.committed_size();
379 size_t min_new_size = initial_size();
380 size_t max_new_size = reserved().byte_size();
381 assert(min_new_size <= new_size_before &&
382 new_size_before <= max_new_size,
383 "just checking");
384 // All space sizes must be multiples of Generation::GenGrain.
385 size_t alignment = Generation::GenGrain;
386
387 int threads_count = 0;
388 size_t thread_increase_size = 0;
389
390 size_t new_size_candidate = old_size / NewRatio;
391 // Compute desired new generation size based on NewRatio and NewSizeThreadIncrease
392 // and reverts to previous value if any overflow happens
393 size_t desired_new_size = adjust_for_thread_increase(new_size_candidate, new_size_before, alignment);
394
395 // Adjust new generation size
396 desired_new_size = clamp(desired_new_size, min_new_size, max_new_size);
397 assert(desired_new_size <= max_new_size, "just checking");
398
399 bool changed = false;
400 if (desired_new_size > new_size_before) {
401 size_t change = desired_new_size - new_size_before;
402 assert(change % alignment == 0, "just checking");
403 if (expand(change)) {
404 changed = true;
405 }
406 // If the heap failed to expand to the desired size,
407 // "changed" will be false. If the expansion failed
408 // (and at this point it was expected to succeed),
409 // ignore the failure (leaving "changed" as false).
410 }
411 if (desired_new_size < new_size_before && eden()->is_empty()) {
412 // bail out of shrinking if objects in eden
413 size_t change = new_size_before - desired_new_size;
414 assert(change % alignment == 0, "just checking");
415 _virtual_space.shrink_by(change);
416 changed = true;
|