Pls review 6887571

Paul Hohensee Paul.Hohensee at Sun.COM
Tue Oct 27 16:01:49 PDT 2009


.02 has the fix for line 1105.

I'll change MaxErgoHeapSize to ErgoHeapSizeLimit, unless someone
else has another opinion.  I'm not proud. :)

Thanks for the review, and for reviewing interim versions.

Paul

Jon Masamitsu wrote:
> Paul,
>
> Just a couple of comments from the .01 version
> of the webrev.  I haven't started the .02 version
> yet so may have more comments after I do.
>
> Jon
>
> arguments.cpp
>
> 1105       InitialHeapSize = min_new + OldSize;
>
> Use FLAG_SET_ERGO()
>
> FLAG_SET_ERGO(uintx, InitialHeapSize, min_new + OldSize);
>
> Sometimes in the setting of the GC policies we like to
> know how the flag was set.
>
> I like ErgoHeapSizeLimit instead of
> MaxErgoHeapSize but just my preference.
>
>
>
> On 10/27/09 09:26, Paul Hohensee wrote:
>> 6887571: Increase default heap config sizes
>>
>> Webrev here
>>
>> http://cr.openjdk.java.net/~phh/6887571/webrev.01/
>>
>> Some background:
>>
>> The default client vm heap config since 2000 for sparc32 has been the 
>> equivalent of
>>
>> -Xmx64m -XX:OldSize=4m -XX:NewSize=2m -XX:NewRatio=8
>> -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=15
>>
>> and for 32-bit x86
>>
>> -Xmx64m -XX:OldSize=4m -XX:NewSize=1m -XX:NewRatio=12
>> -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=15
>>
>> OldSize and NewSize are the initial committed sizes of the old and 
>> young generations
>> respectively.  A minor gc is required to increase the committed size 
>> of the young gen,
>> while a full gc is required to increase the committed size of the old 
>> gen.
>>
>> At the time, 64m was half of the 128m of memory typically available 
>> on high-end
>> desktops, many client applications were satisfied with small heaps 
>> (hence the
>> low -Xms value), and gc times were such that the young gen had to be 
>> small
>> in order to minimize pause times.
>>
>> Since that time, low end desktops and laptops, as well as netbooks 
>> and smartbooks,
>> typically come with 256m, client applications have become much more 
>> "server-like",
>> and we've realized that a small young gen size increases the 
>> frequency of young gcs
>> and the amount of transient data promoted to the old gen to levels 
>> that noticeably
>> impact startup and steady-state performance, principally by provoking 
>> full gcs.
>>
>> This change extends server class heap sizing to the client with a few 
>> changes.
>> Server heap sizing ergonomics should be unaffected.
>>
>> 1. NewRatio is set to 2 for all platforms to accomodate an increase 
>> in transient data size.
>>
>> 2. SurvivorRatio is set to 8 for all platforms.  It was 8 for every 
>> platform except
>> 64-bit x86 (where it was 6) in any case, so it isn't a big change.
>>
>> 3. MaxTenuringThreshold is left at 15 (the maximum).
>>
>> 4. I added MaxRAM, whose implemented definition matches the current 
>> comment for DefaultMaxRAM
>> in globals.hpp.  MaxRAM is the maximum physical memory size used to 
>> compute MaxHeapSize
>> rather than the maximum possible value of MaxHeapSize set by 
>> ergonomics.  I replaced
>> DefaultMaxRAM with MaxErgoHeapSize for the latter purpose.  I added 
>> support for a new
>> argument type, uint64_t, and used it as the type of MaxRAM.  uintx 
>> doesn't have the necessary
>> range on 32-bit systems: a user might want to specify 4g for MaxRAM 
>> on a 32-bit system.
>>
>> 5. The other Default* switches have been stripped of the "Default" 
>> prefix, since to me their
>> values are just as much "default" values as the values of any of 
>> other vm switch, and those don't
>> have a "Default" prefix.  I left DefaultMaxRAMFraction as a synonym 
>> for MaxRAMFraction for
>> the moment because QA uses it.  When they change to MaxRAMFraction, I 
>> intend to remove
>> DefaultMaxRAMFraction.
>>
>> 6. In arguments.cpp, set_heap_size() replaces set_server_heap_size() 
>> and is used for everything
>> except CMS.  CMS has it's own, incompatible (I know: I tried it), 
>> heap sizing ergonomics.
>>
>> 7. The minimum committed size of the old gen (OldSize) remains at 4m 
>> and the minimum
>> committed size of the young gen (NewSize) increases to 4m.  Note that 
>> these are the minimum,
>> not initial sizes.  NewSize is made common to all platforms.
>>
>> 8. I added a switch InitialHeapSize that can be used to set the 
>> initial committed size of the heap.
>> Absent specification by InitialHeapSize, the initial committed size 
>> is 1/64th of physical memory
>> or OldSize + NewSize, whichever is larger.
>>
>> 9. I cleaned up some formatting, esp. in globals.hpp.
>>
>> 10. The default MaxHeapSize is raised from 64m to 96m.  For systems 
>> with <= MaxHeapSize
>> physical memory, the minimum heap size is 1/MinRAMFraction of 
>> physical memory.  The
>> default value of MinRAMFraction is 2.  Thus, a 256m box gets a 96m 
>> heap, as does a 128m
>> box, but a 96m box gets a 48m heap and a 64m box gets a 32m heap.  
>> The default values of
>> MaxRAM and MaxRAMFraction bound the maximum heap size to 256m for the 
>> client vms,
>> 1g for 32-bit server vms and 32g for 64-bit server vms.  The values 
>> for the server vms are
>> the same as before.  I picked 256m for client because I wanted to 
>> bound resource utilization
>> on client systems.  Also, benchmarks runs showed no extra benefit 
>> from going to 512m heaps.
>> 512m is the safe maximum for the serial collector.
>>
>> Thanks,
>>
>> Paul
>>
>>
>>
>>
>>


More information about the hotspot-dev mailing list