Request for review (S): 7113021 G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
Tony Printezis
tony.printezis at oracle.com
Wed Dec 21 09:21:13 UTC 2011
Bengt,
First, to repeat what I told you privately the other day: I really liked
the fact that you introduced the enum for the sizing policy. It makes
the code much easier to understand. I only have a couple of minor comments:
g1CollectorPolicy.cpp:
Instead of having the asserts:
448 assert(G1DefaultMinNewGenPercent<= G1DefaultMaxNewGenPercent, "Min larger than max");
449 assert(G1DefaultMinNewGenPercent> 0&& G1DefaultMinNewGenPercent< 100, "Min out of bounds");
456 assert(G1DefaultMinNewGenPercent<= G1DefaultMaxNewGenPercent, "Min larger than max");
457 assert(G1DefaultMaxNewGenPercent> 0&& G1DefaultMaxNewGenPercent< 100, "Max out of bounds");
at the start of calculate_default_{min,max}_size(), why don't you just
do those checks once in the G1YoungGenSizer constructor (i.e., treat
them like product params)?
g1CollectorPolicy.hpp:
100 // If only -XX:NewSize is set we should use the specified value as the
101 // minimum size for young gen. Still using 50% of the heap as maximum.
102 //
103 // If only -XX:MaxNewSize is set we should use the specified value as the
104 // maximum size for young gen. Still using 20% of the heap as minimum.
Instead of saying 20% and 50%, why don't you just refer to the two
develop parameters, as those might change in the future?
Apart from that, looks great! Ship it.
Tony
On 12/19/2011 07:48 AM, Bengt Rutisson wrote:
>
> Hi everyone,
>
> Could I have a couple of reviews for this change?
> http://cr.openjdk.java.net/~brutisso/7113021/webrev.02/
>
> The idea is to give G1 some room to allow it to use its heuristics for
> calculating the young gen size even when the heap size is fixed.
>
> CR:
> 7113021 G1: automatically enable young gen size auto-tuning when
> -Xms==-Xmx
> http://monaco.us.oracle.com/detail.jsf?cr=7113021
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7113021
>
> I introduce two new develop flags, G1DefaultMinNewGenPercent and
> G1DefaultMaxNewGenPercent. I will try to get the performance team to
> evaluate some good default values for these flags. Right now they are
> 20 and 50 respectively. This might change if we find that some other
> values are more appropriate.
>
> Background:
>
> There are three command line options related to the young gen size:
> NewSize, MaxNewSize and NewRatio (There is also -Xmn, but that is just
> a short form for NewSize==MaxNewSize). G1 will use its internal
> heuristics to calculate the actual young gen size, so these options
> basically only limit the range within which G1 can pick a young gen
> size. Also, these are general options taking byte sizes. G1 will
> internally work with a number of regions instead. So, some rounding
> will occur.
>
> The idea is that my fix should work pretty much as follows:
>
> If nothing related to the the young gen size is set on the command
> line we should allow the young gen to be between 20% and 50% of the
> heap size. This means that every time the heap size changes the limits
> for the young gen size will be updated.
>
> If only -XX:NewSize is set we should use the specified value as the
> minimum size for young gen. Still using 50% of the heap as maximum.
>
> If only -XX:MaxNewSize is set we should use the specified value as the
> maximum size for young gen. Still using 20% of the heap as minimum.
>
> If -XX:NewSize and -XX:MaxNewSize are both specified we use these
> values. No updates when the heap size changes. There is a special case
> when NewSize==MaxNewSize. This is interpreted as "fixed" and will use
> a different heuristic for calculating the collection set when we do
> mixed collection.
>
> If only -XX:NewRatio is set we should use the specified ratio of the
> heap as both min and max. This will be interpreted as "fixed" just
> like the NewSize==MaxNewSize case above. But we will update the min
> and max everytime the heap size changes.
>
> NewSize and MaxNewSize override NewRatio. So, NewRatio is ignored if
> it is combined with either NewSize or MaxNewSize. (A warning message
> is printed.)
>
> Thanks,
> Bengt
More information about the hotspot-gc-dev
mailing list