Maison >Java >javaDidacticiel >Comment gérer l'exception OutOfMemoryError en Java ?

Comment gérer l'exception OutOfMemoryError en Java ?

WBOY
WBOYoriginal
2023-06-25 17:10:403112parcourir

Java est un langage de programmation très populaire En raison de sa grande portabilité, de ses fonctionnalités orientées objet et de ses excellentes performances, il est largement utilisé dans des domaines tels que le développement d'applications au niveau de l'entreprise et le développement d'applications mobiles. Cependant, au cours du processus de développement d'applications Java, des exceptions OutOfMemoryError sont souvent rencontrées, ce qui constitue une erreur provoquée par une utilisation excessive de la mémoire de l'application. Cet article présentera la cause, l'identification et comment gérer cette exception.

1. Qu'est-ce que l'exception OutOfMemoryError ?

L'exception OutOfMemoryError est une exception levée par la machine virtuelle Java lorsqu'elle ne peut pas demander suffisamment d'espace mémoire. Dans le développement d'applications Java, de manière générale, l'espace mémoire alloué à la machine virtuelle Java est limité. Lorsque la mémoire utilisée et allouée par l'application dépasse le seuil prédéfini, une exception OutOfMemoryError se produit. Il convient de noter ici que l'espace mémoire alloué par la machine virtuelle Java est limité et que le système d'exploitation lui-même a également des limites.

2. Cause de l'exception OutOfMemoryError

La mémoire demandée par les applications Java peut être divisée en trois parties : la mémoire tas, la mémoire pile et la mémoire non tas. Parmi eux, la mémoire tas est l'espace mémoire principal utilisé par toutes les applications, tandis que la mémoire pile et la mémoire non tas sont utilisées pour stocker les appels de thread et le stockage mémoire de la machine virtuelle Java elle-même.

Lorsque la mémoire décrite dépasse la taille de mémoire que la machine virtuelle Java peut allouer, une exception OutOfMemoryError se produit. Voici plusieurs raisons qui peuvent provoquer cette exception :

1. Mémoire de tas insuffisante - en raison d'une utilisation excessive de la mémoire de tas par l'application, telle que la création d'un trop grand nombre d'objets volumineux, etc., entraînant une mémoire de tas insuffisante, déclenchant ainsi le Exception OutOfMemoryError.

2. Mémoire non tas insuffisante - Cette situation est généralement due au fait que l'application utilise trop de classes, ou que la classe ou le fichier de package JAR utilisé est trop volumineux, consommant ainsi l'espace mémoire non tas alloué par la machine virtuelle Java.

3. Débordement de mémoire de pile - Lorsque la mémoire de pile utilisée par un thread dépasse la limite supérieure allouée par la machine virtuelle Java, une exception StackOverflowError est levée. Lorsque la mémoire de pile utilisée par le thread atteint la capacité maximale de la pile de machine virtuelle Java, une exception OutOfMemoryError est levée.

3. Identifiez l'exception OutOfMemoryError

Lorsque l'application Java est en cours d'exécution, si les informations d'exception suivantes apparaissent, cela signifie que l'application Java a une exception OutOfMemoryError :

java.lang.OutOfMemoryError : espace de tas Java

Cette information signifie tas Une mémoire insuffisante oblige les développeurs à ajouter des mesures d'optimisation de la mémoire tas au programme ou à augmenter la taille de la mémoire tas de la machine virtuelle Java.

java.lang.OutOfMemoryError : impossible de créer un nouveau thread natif

Ce message signifie qu'il y a trop de threads et que la machine virtuelle Java ne peut pas créer de nouveaux threads. Il doit être résolu en ajustant le nombre de threads utilisés ou en augmentant la mémoire non tas allouée par la machine virtuelle Java.

java.lang.OutOfMemoryError: PermGen space

Ce message signifie que la mémoire non tas déborde et que l'utilisation de la mémoire doit être réduite en ajustant la taille de la mémoire non tas ou en utilisant des techniques d'optimisation.

4. Gestion des exceptions OutOfMemoryError

Lorsqu'ils traitent les exceptions OutOfMemoryError dans les applications Java, les développeurs peuvent les résoudre à l'aide des méthodes suivantes :

1. Augmentez la capacité de mémoire tas allouée par la machine virtuelle Java : passez la ligne de commande "-Xmx". Les paramètres augmentent la capacité de mémoire tas de la machine virtuelle Java, mais la mémoire réellement disponible du système doit être prise en compte.

2. Ajustez le mécanisme de récupération de place de la machine virtuelle Java : améliorez l'efficacité de l'utilisation de la mémoire tas en optimisant le mécanisme de récupération de place, réduisant ainsi la charge causée par la récupération de place.

3. Réduisez l'utilisation de la mémoire en optimisant le code : réduisez l'utilisation de la mémoire en optimisant le code, par exemple en utilisant des pools de connexions, en évitant de créer un grand nombre d'objets, en utilisant autant que possible des types de base et d'autres techniques.

4. Augmentez la capacité de mémoire non tas de la machine virtuelle Java : augmentez l'espace mémoire non tas de la machine virtuelle Java via le paramètre de ligne de commande "-XX:MaxPermSize", mais vous devez également prendre en compte le limitations de la mémoire réellement disponible.

En bref, lorsque vous traitez des exceptions OutOfMemoryError dans les programmes Java, vous devez bien comprendre les raisons et les mécanismes derrière les exceptions afin d'adopter la bonne méthode de traitement. J'espère que cet article vous sera utile.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn