The concurrent collector will throw an OutOfMemoryError if too much
time is being spent in garbage collection: if more than 98% of the
total time is spent in garbage collection and less than 2% of the
heap is recovered, an OutOfMemoryError will be thrown. This feature
is designed to prevent applications from running for an extended
period of time while making little or no progress because the heap is
too small. If necessary, this feature can be disabled by adding the
option
-XX:-UseGCOverheadLimit to the command line.
The policy is the same as that in the parallel collector, except that
time spent performing concurrent collections is not counted toward the
98% time limit. In other words, only collections performed while the
application is stopped count toward excessive GC time. Such
collections are typically due to a concurrent mode failure or an
explicit collection request (e.g., a call to System.gc()).
in conjunction with a passage further down
One of the most commonly encountered uses of explicit garbage
collection occurs with RMIs distributed garbage collection (DGC).
Applications using RMI refer to objects in other virtual machines.
Garbage cannot be collected in these distributed applications without
occasionally collection the local heap, so RMI forces full collections
periodically. The frequency of these collections can be controlled
with properties. For example,
java -Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000 specifies explicit collection once per hour instead of the default rate of once per
minute. However, this may also cause some objects to take much longer
to be reclaimed. These properties can be set as high as Long.MAX_VALUE
to make the time between explicit collections effectively infinite, if
there is no desire for an upper bound on the timeliness of DGC
activity.
Seems to imply that the evaluation period for determining the 98% is one minute long, but it might be configurable on Sun's JVM with the correct define.