This default policy still seems reasonable for some applications but the old adage about one
size not fitting all certainly applies here. So here's what you should consider and what
you can do.
The young generation is acting like a filter to dispose of the shorter lived objects. Any objects
that get through the filter are moved to the tenured generation and are henceforth handled
by the mostly concurrent collections (which I'll just call the concurrent collections from
here on out). If the concurrent collections
are starting too often to suit your tastes, one possibility is to
filter out more of the short lived objects by doing some copying during the young generation
collections. This may slow down the growth in the number of objects in the tenured generation
and lessen the need for too frequent concurrent collections. To do this try the command line
MaxTenuringThreshold is the number of collections that an object must survive before being promoted
into the tenured generation. When objects are copied back into the young generation during a
young generation collection, the objects are copied into an part of the young generation that is
referred to as a survivor space. SurvivorRatio set to 8 will mean that the survivor spaces are
about 10% of the size of the young generation. The survivor spaces and
SurvivorRatio are described in the 5.0 tuning guide that can be found under
The FAQ attached to the 5.0 tuning guide has an entry about experimenting with MaxTenuringThreshold.
By the way having concurrent collections starting "too often" can also be a sign that
the tenured generation is smaller than is needed for good performance. You can always try
increasing the size of the heap to reduce the frequency of the concurrent collections.
The suggestions above may be able to get you the less frequent concurrent collections
without the longer concurrent collections that typically come when the heap is increased.
The default setting to always promote objects that survive a young generation collection is
only the default for the low-pause collector. The other collectors by default will do
some copying before promoting an object to the tenured generation.