Maison Java JavaBase Explication détaillée du processus de création d'objets JVM et de localisation d'accès

Explication détaillée du processus de création d'objets JVM et de localisation d'accès

Dec 08, 2020 pm 05:50 PM
java jvm 创建对象

Tutoriel de base de JavaLa colonne présente le processus de création d'objets par JVM, d'accès et de positionnement

Explication détaillée du processus de création d'objets JVM et de localisation d'accès

Recommandations d'apprentissage gratuites associées : Tutoriel Java Basics

1. Création d'objets

  • Lorsque la machine virtuelle reçoit la nouvelle instruction, elle vérifie si cette instruction peut localiser un symbole de classe dans la référence du pool constant et vérifie si la classe représentée par cette référence symbolique a été chargée, résolue et initialisée. S'il n'y en a pas, effectuez d'abord le processus de chargement de classe.
  • Une fois le chargement de la classe réussi, la machine virtuelle alloue de la mémoire pour le nouvel objet (en divisant une mémoire d'une certaine taille du tas Java). La taille de la mémoire peut être complètement déterminée une fois le chargement de la classe terminé.
  • Deux méthodes d'allocation :
    • (1) : Collision de pointeur : Supposons que la mémoire dans le tas Java est absolument régulière, c'est-à-dire que la mémoire utilisée est d'un côté, la mémoire libre est de l'autre côté, et le pointeur du milieu A est placé comme indicateur, et l'allocation de mémoire est obtenue en déplaçant le pointeur.
    • (2) : Liste libre : Si la mémoire dans le tas Java n'est pas régulière, c'est-à-dire que la mémoire utilisée et la mémoire libre sont entrelacées, la machine virtuelle doit maintenir une liste pour enregistrer les blocs de mémoire disponibles, alloue de la mémoire en recherchant de l'espace dans la liste à allouer aux instances d'objet.
  • Le fait que le tas Java soit régulier ou non est déterminé par le fait que le garbage collector utilisé ait une fonction de compactage.
  • Créer un objet dans une machine virtuelle n'est pas un comportement thread-safe. Il peut arriver que lorsque l'objet A se voit allouer de la mémoire, le pointeur n'ait pas eu le temps d'être modifié et que l'objet B utilise le pointeur d'origine pour le faire. allouer de la mémoire. Il existe deux solutions :
  • (1) : Synchroniser l'action d'allocation d'espace mémoire. En fait, la machine virtuelle utilise CAS avec tentative d'échec pour garantir l'atomicité de l'opération de mise à jour ; 2) : L'action d'allocation de mémoire est divisée en différents espaces selon les threads, c'est-à-dire que chaque thread pré-alloue un petit morceau de mémoire dans le tas Java, appelé tampon d'allocation de thread local (Thread Loal Allocation Buffer, TLAB) .
  • Une fois l'allocation de mémoire terminée, tous les espaces mémoire alloués doivent être initialisés à des valeurs nulles pour garantir que les champs d'instance de l'objet peuvent être utilisés directement dans le code Java sans attribuer de valeurs initiales, et le programme peut accéder à ces champs. La valeur zéro correspondant au type de données.
  • Définissez l'objet, stockez de quelle classe 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, etc. dans l'objet en-tête.
  • 2. Disposition de la mémoire des objets : La disposition des objets stockés en mémoire peut être divisée en trois parties : en-tête, données d'instance et remplissage. L'en-tête de l'objet comprend deux parties d'informations :


(1) : stocke les données d'exécution de l'objet lui-même, telles que le code de hachage, l'âge de génération du GC, l'indicateur d'état du verrouillage, le verrou détenu par le thread, et biais Thread ID, biais horodatage, etc. La longueur de cette partie des données est respectivement de 32 bits et 64 bits dans les machines virtuelles 32 bits et 64 bits. Elle est officiellement appelée Mark Word (une structure de données non fixe qui multiplexe la sienne). stockage selon l'état de l'objet).

(2) : Type de pointeur, c'est-à-dire un pointeur vers les métadonnées de classe de l'objet. La machine virtuelle utilise ce pointeur pour déterminer à quelle classe l'objet est une instance. de.

Données d'instance : les informations effectives réellement stockées par l'objet, c'est-à-dire le contenu des différents types de champs définis dans le code du programme. Qu'elle soit héritée de la classe parent ou définie par la sous-classe elle-même, elle doit être enregistrée.
  • Remplissage d'alignement : il n'existe pas nécessairement et agit comme un espace réservé puisque HotSpot VM exige que la taille de l'objet soit un multiple entier de 8 octets et que la partie d'en-tête de l'objet soit exactement un multiple entier de. 8 octets. Par conséquent, lorsque les données d'instance ne sont pas alignées, elles sont complétées par un remplissage d'alignement.
  • 3. Positionnement de l'accès aux objets : Java exploite des objets spécifiques sur le tas via des données de référence sur la pile (les références d'objet dans la table de variables locales spécifient uniquement les références aux objets, et ne définissent pas comment les localiser). et accéder à l'emplacement des objets dans le tas. La méthode d'accès aux objets est implémentée par Swift.


(1) : Accès au handle : Le tas Java divisera un morceau de mémoire en tant que pool de handles. La référence stocke l'adresse du handle de l'objet. Le handle contient les informations d'adresse de l'instance d'objet. données et tapez les données.


Avantages : La référence stocke une adresse de handle stable lorsque l'objet se déplace, seul le pointeur de données d'instance dans le handle change, pas la référence.


(2) : Pointeur direct : L'adresse de l'objet stockée dans la référence est directement l'adresse des données de type objet (stockées dans la zone méthode) placées dans le tas Java.


Avantages : Plus rapide, ce qui permet d'économiser le temps de positionnement du pointeur. HotSpot utilise un accès direct au pointeur.

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 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
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.

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

Comment exécuter votre première application Spring Boot dans Spring Tool Suite? Comment exécuter votre première application Spring Boot dans Spring Tool Suite? Feb 07, 2025 pm 12:11 PM

Spring Boot simplifie la création d'applications Java robustes, évolutives et prêtes à la production, révolutionnant le développement de Java. Son approche "Convention sur la configuration", inhérente à l'écosystème de ressort, minimise la configuration manuelle, allo

See all articles