Using the default collectors (CMS and G1 are different), GC does not take place 
until there is no room in the eden space (within the young generation) to 
allocate an object. The first thing the JVM does is determine if it needs to 
collect the old generation before it collects the young generation. The way the 
Sun JVM does this is it assumes the worst-case scenario that all objects 
currently occupying the young generation will survive the collection, and thus 
if the size of the young generation is less than the available space in the old 
generation, it collects the old generation first, and then the young generation 
(thus resulting in a full collection).

Example using your settings and assuming the JVM starts with the min heap size. 
You are starting with:

young gen: 125MB,  old gen: 25MB

Hmm, that is not good - the first collection might result in a full collection 
but the old gen is empty. My bet is that the heap will immediately be resized, 
so let's pick a better heap size, say 300MB, then we have:

young gen: 125MB,  old gen: 175MB

Let's say that for the first minor collection 60MB of objects are placed into 
the old gen (usually not likely, but after several collections you could have 
that much space used). So now you have only 115MB of free space left in the old 
gen. The next collection will be a full collection (125MB young gen > 115MB 
free old gen). Now let's assume the JVM does not adjust the heap size any more, 
and that there is always around 60MB of objects occupying the old gen. The 
result: every collection is a full collection.

Now, if the JVM resizes the heap up to the 600MB max, you are in better shape. 
Then you have:

young gen: 125MB,  old gen: 475MB

Not until the old gen contains > 350MB of objects would the JVM do a major 
collection. Of course, if your working set size is > 350MB then you will find 
yourself in the same boat again - major collection each time.

Now in the above I have not taken the size of the survivor spaces into account, 
nor any fine tuning the that JVM does with heap sizing during each collection, 
or advances in newer JVMs (an early version of JDK5 was the last one I checked 
this on). You can easily monitor the exact behavior by turning on one of the GC 
statistics options.

View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4224392#4224392

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4224392
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to