7.1* Comment choisir le bon ramasse-miettes

Si votre application n'a pas d'exigences strictes en matière de latence, vous devez simplement exécuter l'application et laisser la JVM elle-même choisir le bon collecteur.

Dans la plupart des cas, les paramètres par défaut fonctionnent correctement. Si nécessaire, vous pouvez ajuster la taille du segment de mémoire pour améliorer les performances. Si les performances ne sont toujours pas celles attendues, essayez de modifier le collecteur en fonction des exigences de votre application.

  • Séquentiel . Si l'application a un petit ensemble de données (jusqu'à environ 100 Mo) et/ou si elle s'exécute sur un seul processeur sans aucune exigence de latence.
  • Parallèle . Si la priorité est la performance maximale de l'application et qu'il n'y a pas d'exigences de latence (ou des pauses d'une seconde ou plus sont acceptables).
  • CMS/G1 . Si le temps de réponse est plus important que le débit global, les pauses de récupération de place doivent être inférieures à une seconde.
  • ZGC . Si le temps de réponse est prioritaire et/ou si un très grand tas est impliqué.

7.2* Recommandations pour le ramassage des ordures

Évitez les déclencheurs manuels

Outre les mécanismes de base de la récupération de place, l'un des points les plus importants de ce processus en Java est qu'il est non déterministe. C'est-à-dire qu'il est impossible de prédire exactement quand cela se produira au moment de l'exécution.

En utilisant les méthodes System.gc() ou Runtime.gc(), vous pouvez inclure un indice dans votre code pour démarrer le ramasse-miettes, mais cela ne garantit pas qu'il s'exécutera réellement.

Utiliser des outils d'analyse

Si vous ne disposez pas de suffisamment de mémoire pour exécuter votre application, vous rencontrerez des ralentissements, de longs temps de récupération de place, des événements "d'arrêt mondial" et éventuellement des erreurs de mémoire insuffisante. Cela peut indiquer que le tas est trop petit, mais cela peut également indiquer que l'application a une fuite de mémoire.

Vous pouvez utiliser un outil de surveillance comme jstat ou Java Flight Recorder pour voir si l'utilisation du tas augmente indéfiniment, ce qui pourrait indiquer un bogue dans le code.

Préférez les paramètres par défaut

Si vous avez une petite application Java autonome, vous n'aurez probablement pas besoin de configurer la récupération de place. Les paramètres par défaut vous seront très utiles.

Utilisez les indicateurs JVM pour personnaliser

La meilleure approche pour configurer la récupération de place en Java consiste à définir des indicateurs JVM. Les indicateurs peuvent être utilisés pour définir le ramasse-miettes (par exemple, Serial, G1, etc.), la taille initiale et maximale du tas, la taille des partitions du tas (par exemple, Jeune génération, Ancienne génération), etc. plus.

Choisissez le bon robinet

Une bonne ligne directrice en termes de paramètres initiaux est la nature de l'application personnalisée. Par exemple, le garbage collector simultané est efficace, mais déclenche souvent des événements « world stop », ce qui le rend plus adapté au traitement interne où de longues pauses sont acceptables.

Dans le même temps, le ramasse-miettes CMS est conçu pour minimiser la latence, ce qui le rend idéal pour les applications Web où la réactivité est importante.