Maison Java javaDidacticiel Explication détaillée de la gestion de la mémoire Java et des exceptions de dépassement de mémoire

Explication détaillée de la gestion de la mémoire Java et des exceptions de dépassement de mémoire

Oct 18, 2017 am 09:35 AM
java 内存 溢出

L'éditeur suivant vous proposera une brève discussion sur la gestion de la mémoire Java et les exceptions de dépassement de mémoire. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil.

En parlant de gestion de la mémoire, je voudrais d'abord comparer les différences entre Java, C et C++ :

En C et C++, la gestion de la mémoire est la responsabilité des programmeurs, ce qui signifie que les programmeurs doivent effectuer un gros travail d'écriture de code et toujours considérer la maintenance de la mémoire système

En Java, les programmeurs n'ont pas besoin de considérer contrôle et maintenance de la mémoire, mais laissez la JVM les gérer automatiquement, afin que les fuites de mémoire et les problèmes de débordement soient moins susceptibles de se produire. Cependant, lorsque des problèmes de fuites et de débordements de mémoire surviennent, il est difficile de trouver l'erreur sans comprendre le mécanisme de gestion de la mémoire de la JVM.

1. Zone de données d'exécution de la JVM

Lors de l'exécution d'un programme Java, la JVM divisera la mémoire qu'elle gère en plusieurs zones différentes, celles-ci les zones ont non seulement leurs propres objectifs, mais ont également du temps pour la création et la destruction. De manière générale, il contient les zones de données d'exécution suivantes :

La zone orange est privée à chaque thread, c'est-à-dire que chaque thread aura sa propre copie, et la zone verte La zone est partagée par chaque thread.

2.Création d'objets Java

Vérification du chargement des classes

Lorsque la JVM analysera le nouveau mot-clé, elle vérifiera d'abord si les paramètres de cette instruction peuvent localiser une référence symbolique d'une classe dans le pool constant, et vérifiera si la classe représentée par la référence symbolique de cette classe a été chargé. Analysé et initialisé. Sinon, le processus de chargement de classe correspondant doit être effectué en premier.

Allocation de mémoire

Lorsque la vérification de chargement de classe réussit, la JVM doit allouer de la mémoire pour le nouvel objet, ce qui signifie diviser une mémoire d'une certaine taille du java tas. Il existe deux méthodes de division couramment utilisées : Collision de pointeur (nécessite que la mémoire du tas soit absolument régulière), liste libre (la mémoire du tas n'est pas régulière).

Initialisation de la mémoire

La JVM doit initialiser tout l'espace mémoire alloué à des valeurs nulles (à l'exclusion des en-têtes d'objet), ce qui garantit que les champs d'instance de l'objet sont en java Le code peut être utilisé directement sans attribuer de valeurs initiales, ce qui signifie que le programme peut accéder à la valeur zéro correspondant au type de données de ces champs.

Initialisation de l'objet

Exécutez la méthode pour initialiser l'objet selon les souhaits du programmeur.

3. Accéder au positionnement des objets

Une fois les objets créés, nous souhaitons également pouvoir accéder à ces objets rapidement, ce qui nécessite JVM Les données de référence sur la pile sont utilisées pour trouver l'objet spécifique dans le tas. Actuellement, les méthodes d'accès les plus couramment utilisées sont "méthode handle" et "pointeur direct".

Si vous utilisez la méthode handle pour accéder, vous devez diviser une partie de la mémoire dans le tas en tant que pool de handles. La variable de référence stocke l'adresse du handle de l'objet et le handle contient les détails spécifiques. des données d’instance d’objet et des données d’adresse.

Si vous utilisez l'accès direct par pointeur, ce qui est stocké dans la variable de référence est directement l'adresse de l'objet, mais vous devez réfléchir à la manière de placer les informations pertinentes du type data .

4. Exception de dépassement de mémoire

En plus du registre PC, la zone de données d'exécution de la JVM a d'autres exceptions de débordement de mémoire qui peuvent se produire dans n'importe quelle zone de mémoire. Le registre PC est la seule zone qui ne spécifie aucune condition OutOfMemoryError (OOM) dans la spécification JVM.

Débordement de tas

Le tas en Java est utilisé pour stocker des instances d'objets. Si des objets sont créés en continu, il est garanti qu'il existe un chemin accessible entre les racines GC et. l'objet pour éviter le traitement de recyclage GC, une exception de débordement de tas se produira une fois que le nombre d'objets aura atteint la limite maximale de capacité du tas.

Débordement de pile (y compris la pile JVM et la pile de méthodes locales)

1 Si la profondeur de pile demandée par le thread est supérieure au maximum. profondeur autorisée par la JVM, une exception StackOverflowError sera levée

2. Si la JVM ne peut pas demander suffisamment d'espace mémoire lors de l'expansion de la pile, une exception OutOfMemoryError sera levée.

De plus, il existe des débordements de zone de méthode, des débordements de pool constants, des débordements de mémoire native, etc.

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)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
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.

Des sources affirment que Samsung Electronics et SK Hynix commercialiseront de la mémoire mobile empilée après 2026 Des sources affirment que Samsung Electronics et SK Hynix commercialiseront de la mémoire mobile empilée après 2026 Sep 03, 2024 pm 02:15 PM

Selon des informations publiées sur ce site Web le 3 septembre, le média coréen etnews a rapporté hier (heure locale) que les produits de mémoire mobile à structure empilée « de type HBM » de Samsung Electronics et SK Hynix seraient commercialisés après 2026. Des sources ont indiqué que les deux géants coréens de la mémoire considèrent la mémoire mobile empilée comme une source importante de revenus futurs et prévoient d'étendre la « mémoire de type HBM » aux smartphones, tablettes et ordinateurs portables afin de fournir de la puissance à l'IA finale. Selon des rapports précédents sur ce site, le produit de Samsung Electronics s'appelle LPWide I/O memory, et SK Hynix appelle cette technologie VFO. Les deux sociétés ont utilisé à peu près la même voie technique, à savoir combiner emballage en sortance et canaux verticaux. La mémoire LPWide I/O de Samsung Electronics a une largeur de 512 bits.

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.

See all articles