À partir de Java SE 6 HotSpot [tm] Réglage de la récupération de place de la machine virtuelle
le suivant
Temps GC excessif et OutOfMemoryError
Le collecteur simultané lèvera une OutOfMemoryError si trop de temps est passé dans le garbage collection: si plus de 98% du temps total est passé dans le garbage collection et que moins de 2% du tas est récupéré, une OutOfMemoryError sera levée. Cette fonctionnalité est conçue pour empêcher les applications de s'exécuter pendant une période prolongée tout en effectuant peu ou pas de progrès car le tas est trop petit. Si nécessaire, cette fonctionnalité peut être désactivée en ajoutant l'option -XX: -UseGCOverheadLimit à la ligne de commande.
La politique est la même que celle du collecteur parallèle, sauf que le temps passé à effectuer des collectes simultanées n'est pas compté dans la limite de temps de 98%. En d'autres termes, seules les collectes effectuées alors que l'application est arrêtée comptent pour un temps GC excessif. De telles collectes sont généralement dues à un échec du mode concurrent ou à une demande de collecte explicite (par exemple, un appel à System.gc ()).
en conjonction avec un passage plus bas
L'une des utilisations les plus courantes du garbage collection explicite se produit avec le garbage collection distribué (DGC) RMI. Les applications utilisant RMI font référence à des objets dans d'autres machines virtuelles. Les déchets ne peuvent pas être collectés dans ces applications distribuées sans collecter occasionnellement le tas local, donc RMI force périodiquement des collectes complètes. La fréquence de ces collectes peut être contrôlée avec des propriétés. Par exemple,
java -Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
spécifie une collecte explicite une fois par heure au lieu du taux par défaut d'une fois par minute. Cependant, cela peut également entraîner la récupération de certains objets beaucoup plus longs. Ces propriétés peuvent être définies aussi haut que Long.MAX_VALUE pour rendre le temps entre les collections explicites effectivement infini, si vous ne souhaitez pas une limite supérieure sur l'actualité de l'activité DGC.
Cela semble impliquer que la période d'évaluation pour déterminer les 98% est d'une minute, mais elle peut être configurable sur la JVM de Sun avec la bonne définition.
Bien entendu, d'autres interprétations sont possibles.
-XX:+DisableExplicitGC
cela n'aura pas d'impact sur la configuration liée à RMI et le système invoquera gc dans la fréquence définie avec le paramètre-Dsun.rmi.dgc.server.gcInterval
-Dsun.rmi.dgc.server.gcInterval
propriété existe depuis Java 1.2.