CMS GC tuning under JVM 5.0

Jon Masamitsu Jon.Masamitsu at Sun.COM
Fri Apr 18 15:08:04 UTC 2008

Jones, Doug H wrote On 04/17/08 20:01,:

> ...
> 2) Could you interpret the pair of times on the
> CMS-concurrent-abortable-preclean step, in particular the large time
> (88 and 179secs in the above examples).

The times are wall clock times.  Part of the marking of live objects are
done while the
application is running and changing objects.  We monitor the objects
that are changed
and after the concurrent marking we go over those objects to check for
to the liveness of objects.   This latter check is referred to as
precleaning.  It's done
concurrently in two parts.  The precleaing phase runs for a period which
on factors such as the number of objects that we find that need
precleaning and
whether the applications threads are changing objects faster then we are
precleaning them.  After the precleaning phase there is the abortable
phase.   It does the same type of precleaning but it only runs until we've
decided that we want to start the remark phase (which is the second CMS
stop-the-world pause).    We schedule the remark phase to be between young
generation (ParNew in your case) collections.    The abortable
precleaning is
done between the precleaning and the remark phases to do additional
without delaying the remark phase (i.e., we can abort it in order to
start the
remark phase).

Hope that helps.

Now I notice that you are getting concurrent mode failures.  What
release of jdk 5
are you using?  The length of the abortable precleaning phase appears to
be too
long.   I think there was a bug related to abortable precleaning and
young generation collections.  You can turn abortable precleaning off with
hotspot-gc-use mailing list
hotspot-gc-use at

More information about the hotspot-gc-dev mailing list