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