src/share/vm/memory/collectorPolicy.cpp
Print this page
@@ -444,22 +444,24 @@
_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.
+ 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.