Réception d'exceptions OutOfMemoryError
Une exception d' OutOfMemoryError s peut résulter d'un manque d'espace sur le tas Java™ ou d'un manque d'espace dans l'une des zones privées MVS.
Si le tas Java est épuisé, un message d'erreur est reçu indiquant une condition d' OutOfMemoryError s avec le tas Java. Si l'espace d'adressage du processus (c'est-à-dire le tas natif) est épuisé, vous recevez un message d'erreur indiquant qu'une allocation native a échoué. Dans les deux cas, le problème n'est pas forcément une fuite de mémoire, mais indique simplement que l'état constant de l'utilisation de mémoire requis est plus élevé que celui qui est disponible. Par conséquent, la première étape consiste à déterminer quel tas est épuisé et à augmenter sa taille.
Si le problème se produit en raison d'une vraie fuite de mémoire, l'augmentation de la taille du tas ne résoudra pas le problème, mais retardera l'émission des exceptions OutOfMemoryError ou des conditions d'erreur. Ce retard peut être pratique sur les systèmes de production.
La taille maximum d'un objet pouvant être alloué est limitée uniquement par la mémoire disponible. Le nombre maximal d'éléments de tableau pris en charge est 2 ^ 31-1, le nombre maximal autorisé par la spécification de la machine virtuelle Java. Dans la pratique, il n'est pas possible d'allouer des tableaux de grande taille en raison de la mémoire disponible. Configurez la quantité totale de mémoire disponible pour les objets à l'aide de l'option de ligne de commande -Xmx. Ces limites s'appliquent aux machines virtuelles Java 31 et 64 bits.
Si une exception de mémoire insuffisante se produit et qu'aucun message d'erreur n'est généré, le segment de mémoire Java est probablement épuisé. Pour trouver la cause du problème, vous pouvez essayer de tracer ou d'examiner les vidages du tas. Pour plus d'informations, voir Tracing fuitesou Using Heapdumps dans le document J9 VM reference.
Si une exception OutOfMemoryError est émise en raison d'un épuisement d'une zone de mémoire privée sous la JVM 31 bits, vérifiez que la variable d'environnement _BPX_SHAREAS est réglée à NO. Si _BPX_SHAREAS est réglée à YES, plusieurs processus seront autorisés à partager la même mémoire virtuelle (espace d'adressage). Dans ce cas, la zone de mémoire privée se remplit plus rapidement. Pour plus d'informations sur _BPX_SHAREAS, voir Setting _BPX_SHAREAS and _BPX_SPAWN_SCRIPT dans la documentation du produit z/OS® .
Certains paramètres BPXPRMxx, par exemple MAXTHREADS, peuvent également provoquer des exceptions OutOfMemoryError. Pour plus d'informations, consultez la section Configuration de votre système dans la documentation utilisateur d' OpenJ9.