RFR (S): 8005989: The default value for MaxNewSize should be less than or equal to MaxHeapSize
Jesper Wilhelmsson
jesper.wilhelmsson at oracle.com
Mon Jan 14 14:20:45 PST 2013
Looks good. And since it's the season: the copyright should be 2013 ;-)
Ship it!
/Jesper
On 12/1/13 9:27 AM, Erik Helin wrote:
> Hi all,
>
> this change sets MaxNewSize to always be less than or equal to
> MaxHeapSize. The current default value is max_uintx.
>
> Webrev:
> http://cr.openjdk.java.net/~ehelin/8005989/webrev.00/
>
> RFE:
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8005989
>
> Analysis:
> The change should not affect the existing code. The case that has to
> be analyzed is when MaxNewSize is not set on the command line, since
> the update of MaxNewSize is guarded by "if
> (FLAG_IS_DEFAULT(MaxNewSize))".
>
> MaxNewSize is only used in the following files:
>
> - g1CollectorPolicy.cpp:
> Guards all the usage of MaxNewSize in if statements:
>
> if (FLAG_IS_CMDLINE(MaxNewSize)) {
> ...
> }
>
> Since this change uses FLAG_SET_DEFAULT, this change won't affect
> this code path.
>
> - arguments.cpp:
> Only reads MaxNewSize in FLAG_IS_DEFAULT(MaxNewSize) statements.
> Otherwise, only writes new values to MaxNewSize that are not based on
> the value of MaxNewSize. This code is not affected since the value of
> FLAG_IS_DEFAULT(MaxNewSize) is not affected.
>
> - collectorPolicy.cpp:
> MaxNewSize is used in a couple of places:
>
> if (NewSize > MaxNewSize) {
> MaxNewSize = NewSize;
> }
>
> If both NewSize and MaxNewSize have their default values, then
> NewSize is ScaleForWordSize(1*M) which will always be less than
> MaxNewSize which now is MaxHeapSize. The semantics of the if
> statement is only changed if NewSize is set on the command line to a
> value larger than MaxHeapSize, which is not a valid case.
>
> if (FLAG_IS_CMDLINE(MaxNewSize) || FLAG_IS_ERGO(MaxNewSize) {
> ...
> } else {
> max_new_size = scale_by_NewRatio_aligned(max_heap_byte_size());
> max_new_size = MIN2(MAX2(max_new_size, NewSize), MaxNewSize);
> }
>
> This "if" check will still follow the "else" branch in the default
> case, just as before, since FLAG_SET_DEFAULT is used in this change.
> The semantics of the calculation in the else branch is also preserved,
> since MAX2(max_new_size, NewSize) will still always be less than
> MaxNewSize for all valid values of NewSize.
>
> Testing:
> Before the change:
> java -XX:+PrintFlagsFinal -version | grep 'MaxHeapSize \| MaxNewSize'
> uintx MaxHeapSize := 2017460224 {product}
> uintx MaxNewSize = 18446744073709486080 {product}
>
> After the change:
> java -XX:+PrintFlagsFinal -version | grep 'MaxHeapSize \| MaxNewSize'
> uintx MaxHeapSize := 2017460224 {product}
> uintx MaxNewSize = 2015428608 {product}
>
> JPRT
>
> Thanks,
> Erik
More information about the hotspot-dev
mailing list