GC Errata 1

Just some tid bits of information to fill some of the holes in the documentation.

GC ergonomics is used by default on server class machines. Please see

http://java.sun.com/docs/hotspot/gc5.0/ergo5.html

for a description of GC ergonomics and server class machine. The flag "-server" causes the server VM to be used. "-server" does not cause the platform on which the VM is running to be considered a server class machine.

Prior to JDK6 the UseParallelGC collector (with GC ergonomics turned on) used only the flags InitialSurvivorRatio and MinSurvivorRatio to set the initial survivor ratio and the minimum survivor ratio, respectively. GC ergonomics dynamically resizes the survivor spaces, but these flags allow the user to specify initial and minimum sizes for the survivor spaces. The flag SurvivorRatio is used by the other collectors (that don't dynamically resize the survivor spaces) to set the size of the survivor spaces. SurvivorRatio was ignored by the UseParallelGC collector. Beginning with JDK6 if the SurvivorRatio is set on the command line for the UseParallelGC collector and InitialSurvivorRatio and MinSurvivorRatio are not explicitly set on the command line, then InitialSurvivorRatio and MinSurvivorRatio are set to SurvivorRatio + 2.

If UseAdaptiveSizePolicy is turned off when using the UseParallelGC collector, the tenured generation and the young generation stay at their initial sizes throughout the execution of the VM.

Starting with JDK5 update 06 the maximum tenuring threshold is limited to 15. The GC logging output does not correctly reflect this change. This is a bug that will be fixed under 6521376.

If a minimum heap size is set with -Xms and NewSize is not explicitly set, the minimum young generation size is calculated using NewRatio. The UseParallelGC collector is not correctly using the minimum value calculated from -Xms and NewRatio but is using the default value of NewSize. Explicitly setting NewSize does correctly set the minimum size for the generation. This is being fixed under bug 6524727.

Comments:

Are you saying that specifying -server does not switch SoftReference expiry to the server-style behaviour, ie based on max memory not current total memory? If so, it's a bad bug! Although in the end I'd like GC to work out at run time what the best style of expiry is, to make it one less reason to have poor 'out of the box' performance... (Are you listening Mr Dagastine? :)

Rgds

Damon

PS. Who ate the tenuring bit?

Posted by Damon Hart-Davis on March 05, 2007 at 05:07 AM PST #

Damon,

-server still uses the server-style SoftReference policy. There has actually not been any change in the meaning of -server. But I heard from a newer user who had thought that -server meant that all the server-class machine defaults would be used. It seemed a misunderstanding that could be common so I wanted to make it clear that -server does not imply the platform is then considered a server-class machine. -server means what it always has.

Posted by Jon Usmatsami on March 07, 2007 at 10:32 PM PST #

The biased locking implementation (flag is UseBiasedLocking) used one of the age tenuring bits.

Posted by Jon Usmtasami on March 07, 2007 at 10:36 PM PST #

Post a Comment:
Comments are closed for this entry.
About

jonthecollector

Search

Categories
Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today