épuisement du tas Java

Le segment de mémoire Java™ est épuisé lorsque la récupération de place ne peut pas libérer suffisamment d'objets pour effectuer une nouvelle allocation d'objet.

La récupération de place peut libérer uniquement les objets qui ne sont plus référencés par d'autres objets ou qui sont référencés à partir des piles d'unités d'exécution (voir Allocation de segment de mémoire dans la documentation utilisateurOpenJ9 pour plus de détails).

L'épuisement du segment de mémoire Java peut être identifié à partir de la sortie -verbose:gc par la récupération de place qui se produit de plus en plus fréquemment, avec moins de mémoire libérée. Finalement, la machine virtuelle Java échouera et l'occupation du segment de mémoire sera égale ou presque à 100% (voir Journaux de récupération de place en mode prolixe dans la documentation utilisateurOpenJ9 pour plus de détails sur la sortie -verbose:gc ).

Si le segment de mémoire Java est épuisé et que l'augmentation de la taille du segment de mémoire Java ne résout pas le problème, l'étape suivante consiste à examiner les objets qui se trouvent dans le segment de mémoire et à rechercher les structures de données suspectes qui font référence à un grand nombre d'objets Java qui auraient dû être libérés. Utilisez l'analyse de cliché de tas, comme indiqué dans Utilisation de cliché de tas dans la documentation J9 VM reference. Vous pouvez obtenir des informations similaires avec d'autres outils, tels que JProbe et OptimizeIt.