src/share/vm/memory/collectorPolicy.cpp
Print this page
*** 444,465 ****
_min_gen0_size = max_new_size;
_initial_gen0_size = max_new_size;
_max_gen0_size = max_new_size;
} else {
size_t desired_new_size = 0;
! if (!FLAG_IS_DEFAULT(NewSize)) {
! // If NewSize is set ergonomically (for example by cms), it
! // would make sense to use it. If it is used, also use it
! // to set the initial size. Although there is no reason
! // the minimum size and the initial size have to be the same,
! // the current implementation gets into trouble during the calculation
! // of the tenured generation sizes if they are different.
! // Note that this makes the initial size and the minimum size
! // generally small compared to the NewRatio calculation.
_min_gen0_size = NewSize;
desired_new_size = NewSize;
max_new_size = MAX2(max_new_size, NewSize);
} else {
// For the case where NewSize is the default, use NewRatio
// to size the minimum and initial generation sizes.
// Use the default NewSize as the floor for these values. If
// NewRatio is overly large, the resulting sizes can be too small.
--- 444,467 ----
_min_gen0_size = max_new_size;
_initial_gen0_size = max_new_size;
_max_gen0_size = max_new_size;
} else {
size_t desired_new_size = 0;
! if (FLAG_IS_CMDLINE(NewSize)) {
! // If NewSize is set on the command line, we must use it as
! // the initial size and it also makes sense to use it as the
! // lower limit.
_min_gen0_size = NewSize;
desired_new_size = NewSize;
max_new_size = MAX2(max_new_size, NewSize);
+ } else if (FLAG_IS_ERGO(NewSize)) {
+ // If NewSize is set ergonomically, we should use it as a lower
+ // limit, but use NewRatio to calculate the initial size.
+ _min_gen0_size = NewSize;
+ desired_new_size =
+ MAX2(scale_by_NewRatio_aligned(_initial_heap_byte_size), NewSize);
+ max_new_size = MAX2(max_new_size, NewSize);
} else {
// For the case where NewSize is the default, use NewRatio
// to size the minimum and initial generation sizes.
// Use the default NewSize as the floor for these values. If
// NewRatio is overly large, the resulting sizes can be too small.