Maison Java javaDidacticiel Quelles sont les causes et les solutions au débordement de mémoire Java ?

Quelles sont les causes et les solutions au débordement de mémoire Java ?

Jun 15, 2020 pm 01:44 PM
java 内存溢出

Quelles sont les causes et les solutions au débordement de mémoire Java ?

Quelles sont les causes et les solutions du débordement de mémoire Java ?

Les différentes causes et solutions du débordement de mémoire Java sont :

Le premier type de débordement de mémoire est ce que tout le monde pense le plus, et la première réaction est qu'il s'agit d'un débordement de mémoire, c'est d'un débordement de pile :

Alors, quel genre de situation est un débordement de pile ? Lorsque vous voyez les mots-clés suivants, il s'agit d'un débordement de pile :

java.lang.OutOfMemoryError : ......java heap space....

C'est à ce moment-là que vous voyez quelque chose en rapport pour tas, il doit s'agir d'un débordement de pile. S'il n'y a pas de problème avec le code, cela peut être évité en ajustant -Xmx et -Xms de manière appropriée. Cependant, il faut partir du principe qu'il n'y a pas de problème avec le code. ça déborde ? , soit il y a un problème avec le code, soit il y a trop d'accès et chaque temps d'accès est trop long, soit il y a trop de données, ce qui empêche la libération des données, car le ramasse-miettes doit trouver quoi est une poubelle avant de pouvoir être recyclée, et il ne considérera pas ces choses ici. Ce sont des déchets, donc ils ne seront naturellement pas recyclés avant que l'idée ne déborde, le système peut signaler une erreur à l'avance avec les mots-clés :

java.lang.OutOfMemoryError : limite de dépassement de tête GC dépassée

Ceci La situation est que lorsque le système est dans un état GC haute fréquence et que l'effet de recyclage est encore faible, cette erreur commencera à être signalée . Cette situation entraîne généralement un grand nombre d'objets qui ne peuvent pas être libérés, ce qui peut être dû à une mauvaise utilisation des références ou à une demande d'objet volumineux, mais le dépassement de la mémoire de l'espace du tas Java peut ne pas signaler cette erreur à l'avance. , c'est-à-dire que cela peut être directement causé par une mémoire insuffisante, plutôt que par un GC haute fréquence

Le deuxième type de débordement de mémoire, lorsque PermGen déborde ou que PermGen est plein, vous verrez des mots-clés comme celui-ci :

Les informations clés sont :

java.lang.OutOfMemoryError : espace PermGen

Raison : le système contient beaucoup de code ou fait référence à de nombreux packages tiers, ou un grand nombre de constantes sont utilisées dans le code, ou des constantes sont injectées via interne, ou via un chargement dynamique de code, etc., ce qui conduit à l'expansion du pool de constantes, bien que JDK 1.5 et versions ultérieures puissent recycler la zone permanente via les paramètres , mais ce que nous espérons, c'est que cet endroit ne fera pas de GC, et cela suffira. Par conséquent, dans des circonstances normales, nous ferons moins d'opérations similaires cette année, donc la méthode couramment utilisée face à cette situation est : PermGen Le débordement et. la taille de -XX:MaxPermSize.

Le troisième type de débordement de mémoire : utilisé lors de l'utilisation d'allocateDirect() dans ByteBuffer. De nombreux frameworks javaNIO sont encapsulés comme d'autres méthodes

Mot-clé de débordement :

java.lang.OutOfMemoryError. : Mémoire tampon directe
Si vous utilisez directement ou indirectement la méthode allocateDirect dans ByteBuffer sans effacer, un problème similaire se produira. Sortie IO du programme de référence régulier Il existe un processus de conversion entre le mode noyau et le mode utilisateur, qui correspond à la mémoire directe et. mémoire indirecte. Si vous souhaitez envoyer le contenu d'un fichier au client dans une application standard, vous devez le copier dans la mémoire indirecte du programme via la conversion directe de la mémoire du système d'exploitation (c'est-à-dire dans le tas. ), puis sorti vers la mémoire directe et envoyé par le système d'exploitation. La mémoire directe est gérée conjointement par le système d'exploitation et l'application peut être directement contrôlée par l'application elle-même. La mémoire dans la mémoire directe. ne sera pas récupéré, alors soyez prudent.

Si des opérations similaires se produisent fréquemment, vous pouvez envisager de définir les paramètres : -XX:MaxDirectMemorySize

Erreur de dépassement de mémoire de type 4 :

Mot clé de débordement :

java .lang.StackOverflowError

Ce paramètre explique directement une chose, c'est-à-dire que -Xss est trop petit. Nous demandons que de nombreuses aiguilles de pile d'appels locales et autres contenus soient stockés dans le thread actuellement détenu par l'utilisateur. thread Avant jdk 1.4, la valeur par défaut était de 256 Ko, et après la version 1.5, elle était de 1 Mo. Si cette erreur est signalée, cela signifie uniquement que le paramètre -Xss est trop petit. Bien sûr, les JVM de certains fabricants n'ont pas ce paramètre. est uniquement pour Hotspot VM, cependant, si nécessaire, vous pouvez apporter quelques optimisations au système afin que la valeur de -Xss soit disponible.

Le cinquième type d'erreur de dépassement de mémoire :

Mot-clé de débordement :

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

Le quatrième ci-dessus Ce type d'erreur de débordement a expliqué l'espace mémoire du thread. En fait, le thread n'occupe essentiellement que la zone mémoire autre que le tas. être alloué au thread. Cela est soit dû au fait que la mémoire elle-même n'est pas suffisante, soit que l'espace du tas est trop grand, ce qui entraîne peu de mémoire restante, et comme le thread lui-même occupe de la mémoire, ce n'est pas suffisant. est expliqué, et comment le modifier, je n'ai pas besoin d'en dire plus, vous comprenez.

Débordement de mémoire de catégorie 6 :

Mot clé de débordement

java.lang.OutOfMemoryError : demande de {} octets pour {}hors échange

Erreurs de cette classe sont généralement dus à un espace d'adressage insuffisant.

Les six grandes catégories de débordements courants représentent 99 % des situations de débordement dans la JVM. Il est très difficile d'échapper à ces situations de débordement, à moins que des défauts très étranges ne se produisent, comme une défaillance du cache de code due au matériel de mémoire physique. problèmes. Erreur (se produit lors du processus de conversion du code octet en code natif, mais la probabilité est extrêmement faible), dans ce cas, la mémoire sera directement écrasée, similaire à l'interaction fréquente du swap, dans certains systèmes, le système le fera. être directement planté. Si l'espace d'adressage du système d'exploitation n'est pas suffisant, le système ne peut pas démarrer du tout, haha ​​; l'abus de JNI entraînera également des problèmes de non-libération de la mémoire locale, alors essayez d'éviter d'ouvrir trop de sockets avec socket ; les données de connexion rapporteront également quelque chose comme : IOException : Trop de fichiers ouverts et autres messages d'erreur.

Tutoriel recommandé : "Tutoriel vidéo Java"

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

See all articles