Maison  >  Article  >  Java  >  Questions d'entretien sur le débordement de mémoire Java

Questions d'entretien sur le débordement de mémoire Java

(*-*)浩
(*-*)浩original
2019-11-14 14:56:272862parcourir

Questions d'entretien sur le débordement de mémoire Java

Il existe de nombreuses raisons de débordement de mémoire, les plus courantes sont les suivantes :

La quantité de données chargées dans la mémoire est trop volumineux Énorme, comme récupérer trop de données de la base de données à la fois

Il y a des références à des objets dans la classe de collection, qui ne sont pas effacées après utilisation, ce qui rend la JVM incapable de recycler

Il y a des boucles ou des boucles infinies dans le code Générant trop d'entités d'objets en double ;

BUG dans le logiciel tiers utilisé

La valeur de la mémoire du paramètre de démarrage est trop petite ; ;

Débordement de mémoire Solution :

La première étape consiste à modifier les paramètres de démarrage de la JVM et à augmenter directement la mémoire. (N'oubliez pas d'ajouter les paramètres -Xms et -Xmx.)

La deuxième étape consiste à vérifier le journal des erreurs pour voir s'il y a d'autres exceptions ou erreurs avant l'erreur "OutOfMemory".

La troisième étape consiste à parcourir et analyser le code pour découvrir où un débordement de mémoire peut se produire.

Concentrez-vous sur les points suivants :

Vérifiez s'il existe une requête pour obtenir toutes les données d'un coup dans la requête de la base de données. De manière générale, si cent mille enregistrements sont récupérés simultanément dans la mémoire, cela peut provoquer un débordement de mémoire. Ce problème est relativement caché. Avant la mise en ligne, il y avait moins de données dans la base de données et il était moins susceptible de causer des problèmes. Après la mise en ligne, il y avait plus de données dans la base de données et une seule requête pouvait provoquer un débordement de mémoire.

Par conséquent, essayez d'utiliser la pagination pour les requêtes de base de données. Vérifiez le code pour les boucles infinies ou les appels récursifs. Vérifiez s'il existe une grande boucle qui génère à plusieurs reprises de nouvelles entités d'objet.

Vérifiez s'il existe une requête pour obtenir toutes les données dans la requête de base de données. De manière générale, si cent mille enregistrements sont récupérés simultanément dans la mémoire, cela peut provoquer un débordement de mémoire.

Ce problème est relativement caché. Avant la mise en ligne, il y avait moins de données dans la base de données et il était moins susceptible de causer des problèmes. Après la mise en ligne, il y avait trop de données dans la base de données et une seule requête pouvait se produire. provoquer un débordement de mémoire.

Par conséquent, essayez d'utiliser la pagination pour les requêtes de base de données.

Vérifiez si les objets de collection tels que List et MAP ne sont pas effacés après utilisation. Les objets de collection tels que List et MAP auront toujours des références aux objets, ce qui rendra ces objets incapables d'être recyclés par GC.

La quatrième étape consiste à utiliser l'outil de visualisation de la mémoire pour visualiser dynamiquement l'utilisation de la mémoire.

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