Table des matières
La mémoire d'exécution comprend :
Si le thread exécute une méthode Java, ce compteur enregistre l'adresse de l'instruction de bytecode de la machine virtuelle en cours d'exécution. S'il s'agit d'une méthode native, la valeur du compteur est vide.
La pile fait généralement référence à la pile de machines virtuelles ou à la partie table de variables locales de la pile de machines virtuelles.
Pour la plupart des applications, le Heap est la plus grande pièce de mémoire gérée par la machine virtuelle.
Le tas Java est la zone principale gérée par le garbage collector. Étant donné que les collectionneurs modernes utilisent essentiellement la méthode de collecte par bandes, le tas Java peut également être subdivisé en : nouvelle génération et ancienne génération.
Pool de constantes d'exécution
Création d'objets
Disposition de la mémoire des objets
Positionnement de l'accès aux objets (P48)
Maison Java javaDidacticiel Une analyse approfondie de la gestion de la mémoire dans les machines virtuelles Java

Une analyse approfondie de la gestion de la mémoire dans les machines virtuelles Java

Sep 12, 2018 pm 03:17 PM
java虚拟机

Cet article vous apporte une analyse approfondie de la gestion de la mémoire dans les machines virtuelles Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

La mémoire d'exécution comprend :

  1. Zone de méthode

  2. Pile de machines virtuelles (VM Stack)

  3. Native Method Stack (Native Method Stack) Heap)

  4. Compteur de programme S'inscrire

  5. Le compteur de programme
  6. est une comparaison Le petit espace mémoire peut être considéré comme un indicateur de numéro de ligne du bytecode exécuté par le thread actuel. (L'interpréteur de bytecode fonctionne en modifiant la valeur de ce compteur pour sélectionner les instructions de bytecode qui doivent être exécutées).

  7. Étant donné que le multithread de la machine virtuelle Java est implémenté en changeant de thread à tour de rôle et en allouant du temps d'exécution au processeur, à un moment donné, un processeur n'exécutera que des instructions dans un seul thread. Par conséquent, afin de revenir à la position d'exécution correcte après le changement de thread, chaque thread doit disposer d'un compteur de programme indépendant. Les compteurs entre chaque thread ne s'influencent pas et sont stockés indépendamment. Nous appelons ce type de zone mémoire « thread privé ». " de mémoire.

Si le thread exécute une méthode Java, ce compteur enregistre l'adresse de l'instruction de bytecode de la machine virtuelle en cours d'exécution. S'il s'agit d'une méthode native, la valeur du compteur est vide.

Pile de machines virtuelles Java

La pile de machines virtuelles Java est également privée de thread et a le même cycle de vie que le thread.

La pile de machine virtuelle décrit le modèle de mémoire d'exécution : lorsque chaque méthode est exécutée, un cadre de pile est créé pour stocker les tables de variables locales, les piles d'opérandes, les liens dynamiques, les sorties de méthode et d'autres informations. Le processus depuis l'appel jusqu'à la fin de l'exécution de chaque méthode correspond au processus de poussée d'un cadre de pile dans la pile et de sortie de la pile dans la machine virtuelle.

La pile fait généralement référence à la pile de machines virtuelles ou à la partie table de variables locales de la pile de machines virtuelles.

La table de variables locales stocke divers types de données de base connus au moment de la compilation, les références d'objet et les types returnAddress (pointant vers l'adresse d'une instruction de bytecode).

Parmi eux, les données de type long et double occuperont deux espaces de variables locales (Slots), et les autres types de données n'en occuperont qu'un.

L'espace mémoire requis par la table de variables locales est alloué au moment de la compilation. Lors de la saisie d'une méthode, la quantité d'espace scalaire local que la méthode doit allouer dans le cadre est entièrement déterminée et ne changera pas au cours de la compilation. exécution de la méthode. La taille de la table des variables locales.

La spécification de la machine virtuelle stipule deux conditions d'exception pour cette zone : si la profondeur de pile demandée par le thread est supérieure à la profondeur autorisée par la machine virtuelle, une exception StackOverflowError sera levée si la pile de machine virtuelle le peut ; être étendu dynamiquement, si l'expansion Lorsque la mémoire insuffisante ne peut pas être demandée, une exception OutOfMemoryError sera levée.

Pile de méthodes locales

Le rôle de la pile de machines virtuelles est très similaire. La pile de méthodes locales sert les méthodes natives utilisées par la machine virtuelle. Il n'y a pas de règles obligatoires sur le langage, l'utilisation et les structures de données dans les méthodes natives.

Java Heap

Pour la plupart des applications, le Heap est la plus grande pièce de mémoire gérée par la machine virtuelle.

Le tas est une zone mémoire partagée par tous les threads et est créée au démarrage de la machine virtuelle. Le seul but de cette zone mémoire est de contenir des instances d'objet, et presque toutes les instances d'objet se voient allouer de la mémoire ici (toutes les instances d'objet et tous les tableaux).

Le tas Java est la zone principale gérée par le garbage collector. Étant donné que les collectionneurs modernes utilisent essentiellement la méthode de collecte par bandes, le tas Java peut également être subdivisé en : nouvelle génération et ancienne génération.

Du point de vue de l'allocation de mémoire, le tas Java partagé par les threads peut être divisé en plusieurs tampons d'allocation privés par thread (Thread Local Allocation Buffer, TLAB).

Le tas Java peut gérer un espace mémoire physiquement discontinu, à condition qu'il soit logiquement continu. Une fois implémentée, elle peut être implémentée sous forme de taille fixe ou évolutive, mais les machines virtuelles traditionnelles sont implémentées de manière évolutive (contrôle -Xms, -Xmx).

Zone de méthode

Comme le tas Java, il s'agit d'une zone mémoire partagée par chaque thread. Elle est utilisée pour stocker les informations de classe, les constantes, les variables statiques et le compilateur juste à temps compilé. informations qui ont été chargées par le code de la machine virtuelle et d’autres données. Bien que la machine virtuelle Java décrit la zone de méthode comme une partie logique du tas, elle possède un alias appelé Non-Heap pour la distinguer du tas Java.

En plus de ne pas nécessiter de mémoire contiguë comme le tas Java et d'avoir l'option de taille fixe ou d'extensibilité, vous pouvez également choisir de ne pas implémenter le garbage collection. La collecte des déchets a rarement lieu dans cette zone, mais elle n'existe pas de manière permanente comme la génération éternelle après être entrée dans la zone des méthodes. Le recyclage de la mémoire dans ce domaine vise principalement à recycler les types de pool constant et de déchargement. Le

Pool de constantes d'exécution

fait partie de la zone méthode. En plus de la version de la classe, des champs, des méthodes, des interfaces et d'autres informations, le fichier de classe contient des informations. Une autre information est la table de pool de constantes, qui est utilisée pour divers littéraux et références de symboles générés lors de la compilation. Ce contenu sera stocké dans le pool de constantes d'exécution dans la zone de méthode après le chargement de la classe.

C'est dynamique. Seul le contenu du pool de constantes préinstallé dans le fichier Class peut entrer dans le pool de constantes d'exécution dans la zone méthode. De nouvelles constantes peuvent également être mises dans le pool pendant l'exécution. Developers. est le intern() de la classe String.

Création d'objets

Lorsque la machine virtuelle reçoit une nouvelle instruction, elle vérifie d'abord si les paramètres de cette instruction peuvent être localisés dans le pool constant. Une référence symbolique à une classe et vérifie si la classe représentée par cette référence symbolique a été chargée, résolue et initialisée. Sinon, le processus de chargement de classe correspondant doit être effectué en premier.

Allouer de la mémoire pour les nouveaux objets après la vérification du chargement de la classe. La quantité de mémoire requise par un objet est entièrement déterminée une fois la classe chargée.

Une fois l'allocation de mémoire terminée, l'espace mémoire que la machine virtuelle doit être allouée est initialisé à zéro. Si TLAB est utilisé, ce travail peut être effectué à l'avance lorsque TLAB est alloué.

Ensuite, la machine virtuelle effectue les réglages nécessaires pour l'objet, tels que la classe dont l'objet est une instance, comment trouver les informations de métadonnées de la classe, le code de hachage de l'objet, l'âge de génération GC. de l'objet et d'autres informations. Ces informations sont placées dans l'en-tête de l'objet.

Après avoir terminé l'étape précédente, la tâche pour la machine virtuelle est terminée, mais du point de vue du programme Java, la création d'objets vient de commencer et

Disposition de la mémoire des objets

La disposition de la mémoire des objets en mémoire peut être divisée en 3 parties : l'en-tête de l'objet, les données d'instance et le remplissage d'alignement.

L'en-tête d'objet de la machine virtuelle HotSpot se compose de deux parties :

1. Stocke les données d'exécution de l'objet lui-même, telles que le hachage, l'âge de génération GC, l'indicateur d'état de verrouillage et le thread. verrouillage de maintien, ID de fil biaisé, horodatage biaisé, etc. La longueur des données dans les machines virtuelles 32 bits et 64 bits est respectivement de 32 bits et 64 bits, ce qui est officiellement appelé « Marquer le mot ».

2. Tapez le pointeur, qui est le pointeur des métadonnées de classe de l'objet. La machine virtuelle utilise ce pointeur pour déterminer de quelle classe l'objet est une instance. Si l'objet est un tableau Java, il doit y avoir une donnée dans l'en-tête de l'objet pour enregistrer la longueur du tableau, car la machine virtuelle peut déterminer la taille de l'objet Java via les métadonnées des objets Java ordinaires, mais elle ne le peut pas. déterminez-le à partir des métadonnées du tableau. La taille du tableau.

Positionnement de l'accès aux objets (P48)

Les données de référence sur la pile de programmes Java peuvent accéder aux instances d'objets dans le tas via les deux méthodes principales suivantes.

Handle : Un morceau de mémoire sera alloué dans le tas Java pour être utilisé comme handle. La référence stocke l'adresse du handle de cet objet. Le handle contient les propriétés spécifiques des données d’instance d’objet et des données de type.

Pointeur direct : dans la disposition des objets de tas Java, vous devez réfléchir à la manière d'empêcher l'accès aux informations relatives aux données de type.

Recommandations associées :

Introduction détaillée à la zone de données d'exécution de la mémoire gérée par la machine virtuelle Java

Explication détaillée de JAVA avec images et texte Connaissances liées à la machine virtuelle - Modèle de mémoire JVM

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
4 Il y a quelques semaines 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)

Guide complet : processus détaillé d'installation de la machine virtuelle Java Guide complet : processus détaillé d'installation de la machine virtuelle Java Jan 24, 2024 am 09:02 AM

Éléments essentiels du développement Java : explication détaillée des étapes d'installation de la machine virtuelle Java, exemples de code spécifiques requis Avec le développement de l'informatique et de la technologie, le langage Java est devenu l'un des langages de programmation les plus utilisés. Il présente les avantages du multiplateforme et de l'orientation objet, et est progressivement devenu le langage préféré des développeurs. Avant d'utiliser Java pour le développement, vous devez d'abord installer la machine virtuelle Java (JavaVirtualMachine, JVM). Cet article expliquera en détail les étapes d'installation de la machine virtuelle Java et fournira des exemples de code spécifiques.

Utiliser le Pagoda Panel pour optimiser la configuration de la machine virtuelle Java Utiliser le Pagoda Panel pour optimiser la configuration de la machine virtuelle Java Jun 21, 2023 pm 02:52 PM

Avec le développement continu d'Internet, de plus en plus d'applications et d'entreprises nécessitent l'utilisation de programmes développés en langage Java. Pour l'exécution de programmes Java, les performances de la machine virtuelle Java (JVM) sont très importantes. L’optimisation de la configuration constitue donc un moyen important d’améliorer les performances des applications Java. Le panneau Pagoda est un panneau de contrôle de serveur couramment utilisé qui peut aider les utilisateurs à gérer les serveurs plus facilement. Cet article expliquera comment utiliser le panneau Pagoda pour optimiser la configuration de la machine virtuelle Java. Première étape : installer la machine virtuelle Java

Comment la machine virtuelle Java utilise-t-elle le comptage de références pour la gestion de la mémoire ? Comment la machine virtuelle Java utilise-t-elle le comptage de références pour la gestion de la mémoire ? Apr 13, 2024 am 11:42 AM

La machine virtuelle Java utilise le comptage de références pour gérer l'utilisation de la mémoire. Lorsque le nombre de références d'un objet atteint 0, la JVM effectue un garbage collection. Le mécanisme de comptage de références comprend : chaque objet possède un compteur qui stocke le nombre de références pointant vers l'objet. Lorsque l'objet est créé, le compteur de référence est mis à 1. Lorsqu'un objet est référencé, le compteur de référence est incrémenté. Lorsque la référence se termine, le compteur de référence est décrémenté.

Structure et fonction du cadre de pile dans la machine virtuelle Java Structure et fonction du cadre de pile dans la machine virtuelle Java Apr 14, 2024 am 08:03 AM

Le cadre de pile est la structure de données de base pour l'exécution de méthodes dans la machine virtuelle Java (JVM) et comprend les parties suivantes : Table de variables locales : stocke les variables locales de la méthode. Pile d'opérandes : stocke les opérandes et les résultats intermédiaires. Données de trame : contiennent l'adresse de retour et le compteur du programme actuel. Les fonctions du cadre de pile incluent : le stockage des variables locales. Effectuer des opérations d'opérande. Gérer les appels de méthode. Aider à la gestion des exceptions. Collecte des déchets auxiliaire.

Démystifier le principe de fonctionnement de la JVM : exploration approfondie des principes de la machine virtuelle Java Démystifier le principe de fonctionnement de la JVM : exploration approfondie des principes de la machine virtuelle Java Feb 18, 2024 pm 12:28 PM

Explication détaillée des principes JVM : Une exploration approfondie du principe de fonctionnement de la machine virtuelle Java nécessite des exemples de code spécifiques 1. Introduction Avec le développement rapide et l'application généralisée du langage de programmation Java, la machine virtuelle Java (JavaVirtualMachine, appelée JVM ) est également devenu indispensable dans le développement de logiciels. En tant qu'environnement d'exécution des programmes Java, JVM peut fournir des fonctionnalités multiplateformes, permettant aux programmes Java de s'exécuter sur différents systèmes d'exploitation. Dans cet article, nous examinerons le fonctionnement de la JVM

Éléments fondamentaux de la technologie Java : compréhension approfondie du langage Java, de la machine virtuelle Java et des bibliothèques Java SE Éléments fondamentaux de la technologie Java : compréhension approfondie du langage Java, de la machine virtuelle Java et des bibliothèques Java SE Dec 26, 2023 am 10:28 AM

Pile technologique de base Java : compréhension approfondie du langage Java, de la machine virtuelle Java et de la bibliothèque JavaSE. Avec le développement continu de l'informatique et de la technologie, le langage Java est devenu l'un des langages de programmation les plus populaires au monde. En tant que langage de programmation multiplateforme de haut niveau, Java est largement utilisé dans divers domaines, notamment dans le développement d'applications d'entreprise et le cloud computing. Pour devenir un excellent développeur Java, vous devez maîtriser la pile technologique de base Java, à savoir le langage Java, la machine virtuelle Java et Java.

Explication détaillée du processus d'installation de la machine virtuelle Java : vous apprend les étapes d'installation étape par étape Explication détaillée du processus d'installation de la machine virtuelle Java : vous apprend les étapes d'installation étape par étape Jan 05, 2024 pm 03:58 PM

Guide d'installation de la machine virtuelle Java : vous explique étape par étape comment l'installer, des exemples de code spécifiques sont requis Introduction : La machine virtuelle Java (JavaVirtualMachine, appelée JVM) est une machine virtuelle qui peut exécuter du bytecode Java. Il s'agit d'un composant essentiel de la technologie Java et de la clé pour que les applications Java puissent fonctionner sur toutes les plates-formes. Dans cet article, nous vous apprendrons étape par étape comment installer une machine virtuelle Java et vous fournirons des exemples de code spécifiques pour vous aider à démarrer rapidement. 1. Téléchargez JavaDev

Guide complet d'installation et de configuration pour la machine virtuelle Java Guide complet d'installation et de configuration pour la machine virtuelle Java Jan 05, 2024 pm 02:03 PM

Partir de zéro : explication détaillée de l'installation et de la configuration de la machine virtuelle Java [Introduction] Java est un langage de programmation multiplateforme et sa plate-forme d'exécution dépend de la machine virtuelle Java (JavaVirtualMachine, JVM). En installant et en configurant la machine virtuelle Java, vous pouvez exécuter des programmes Java sur différents systèmes d'exploitation. Cet article vous guidera à partir de zéro, détaillera comment installer et configurer une machine virtuelle Java et fournira quelques exemples de code Java couramment utilisés. Commençons à apprendre ! [Partie 1 : J

See all articles