JVM, je veux que vous « éventrer »

1. mise à niveau Daguai, vous ouvrez pas autour de la machine virtuelle Java

2. zonage JVM

3. Programme de lutte contre

4. Java Virtual Machine pile

5. la mémoire de tas Java

6. La zone de procédé / Metaspace

7. piles de méthodes natives

8. segment de mémoire externe

9. Résumé complet

1. mise à niveau Daguai, vous ouvrez pas autour de la machine virtuelle Java

Machine virtuelle Java, les programmeurs Java avancé, il est absolument pas ouvert autour, nous ne pouvons pas contourner le sujet.

Vous Daguai mise à niveau, la transformation avancée de la voie, le projet est lié à rencontrer une variété de ligne OOM, GC et d'autres questions, cette fois-ci sur les compétences essentielles JVM.

Cet article, nous allons écrire leur propre code pour exécuter point de vue, la machine virtuelle Java « son éventrer. » Regardez le code que nous écrivons, dans toutes les régions de la machine virtuelle Java ont fait des quoi?

Dire une chose, d'interroger l'ingénieur Java, JVM est un anneau doit demander, par conséquent, si l'entrevue ou le travail réel, vous avez un grand besoin de consolider ses propres compétences JVM.

Étira la vérité un peu loin, et rapidement tirer en arrière immédiatement dans la question!

2. zonage JVM

région JVM, les pièces suivantes:

  • programme de lutte contre
  • pile VM
  • monceau
  • district Méthodes
  • piles de méthodes natives

Ensuite, nous JVM comme un organisme, la partie mentionnée ci-dessus est ses différents organes. Nous allons écrire leur propre code Java sur la façon d'exécuter cet angle par machine virtuelle Java, la machine virtuelle Java pour analyser ces « organes » est de savoir comment soutenir notre code Java pour exécuter le haut.

3. Programme de lutte contre

Supposons que nous ayons les éléments suivants d'une classe, il est seulement le plus élémentaire d'un HelloWorld:

public class HelloWorld {

public static void main (String args) {

System.out.println ( "Bonjour tout le monde");

}

}

Première partie du code ci-dessus sera présent dans le fichier suffixe « .java », le fichier est des fichiers de code source java.

Mais ce document est pour nos programmeurs, ordinateur ne peut pas lire ce code.

A cette époque, il doit par un compilateur, un fichier de code source est compilé « .java » extension est le fichier de code octet suffixe « de ».

Bytecode fichiers ce suffixe « .class », le magasin est d'écrire votre code dans le code compilé octet.

Une calculatrice de bytecode de langue est compréhensible, plutôt que d'un tas de code que nous écrivons. Ce code d'octets ressembler à quelque chose comme ce qui suit:

note : Ce code d'octets qui est pas tout à fait la classe HelloWorld brille à écrire, est de donner quelques exemples, le faire savoir tout le monde « .java » traduit en « .class » est probablement ce qu'il était.

Probablement vous expliquer, comme le chiffre « 0: aload_0 » Ce sont les « instructions de bytecode, » il correspond à une section de l'instruction de la machine, l'ordinateur n'a lu sur ces instructions de code machine, vous devez savoir précisément ce qu'il faut faire.

Par exemple des instructions de bytecode peuvent permettre à un ordinateur pour lire les données à partir d'une mémoire, ou écrit des données à un déplacement de mémoire. Une variété de commandement, ordonnera l'ordinateur à la boutique et aller à toutes sortes de choses.

Donc, ici, nous devons d'abord comprendre le premier point: code Java sera traduit en bytecode, bytecode instructions indiquant un autre ordinateur à faire des choses différentes.

Ainsi, dans la mise en uvre des instructions de bytecode, machine virtuelle Java dans l'action de compteur de programme est Shane?

La réponse est: Pour l'enregistrement de chaque instruction de bytecode la position en cours d'exécution de fils, à savoir, le fil de courant d'enregistrement sur lequel un bytecode d'instruction en cours d'exécution.

Dans la pratique, il y aura une variété d'exécution simultanée de plusieurs threads de code, Chaque thread a son propre compteur de programme , Qui suit le fil courant auquel la mise en uvre actuelle d'un des instructions de code d'octets.

La figure ci-dessous démontrent clairement plus la relation entre eux.

4. Java Virtual Machine pile

Eh bien, nous regardons. Nous savons tous que lorsque le code Java est exécuté, il doit être thread pour exécuter le code pour une méthode. Même les plus HelloWorld de base, il y aura un fil conducteur pour exécuter la principale méthode dans le code.

Dans la méthode, la définissent souvent les variables locales d'une certaine façon, comme cela, qui définit une variable locale « nom » dans la méthode.

sayHello () {publique vide

String name = "bonjour";

}

Nous avons donc cette machine virtuelle Java « organe » sera joué, il doit y avoir une machine virtuelle Java zone est d'enregistrer des variables locales, etc. dans chaque méthode de données, cette zone est la pile de la machine virtuelle Java

Pourquoi cette région? Parce que chaque thread pour exécuter le code de différentes méthodes, dans la méthode également les appels imbriqués à d'autres méthodes, donc Chaque thread doit avoir sa propre pile de la machine virtuelle Java .

Si le thread exécute une méthode, il appellera crée une méthode correspondante pour cette cadre pile

cadre pile où il y a une table variable locale de cette méthode, la pile d'opérandes, des liens dynamiques, et d'autres choses à l'exportation. Voici quelque chose d'autre est pas une bonne compréhension, nous avons ensuite élaboré par d'autres articles de retour ici pour comprendre une variable locale peut être.

Retour à l'exemple ci-dessus, par exemple, un thread appelle ci-dessus écrit méthode « sayHello », il va créer un cadre de pile est la méthode « sayHello », enfoncé dans le fil propre pile de la machine virtuelle Java à l'intérieur.

cadre de pile variable locale de la table sera « nom » variable locale, le montre la figure ce processus.

Ensuite, si la méthode « sayHello » appelle une autre méthodes « accueil », telles que le code suivant:

Ensuite, donnez la méthode « salutation » et créer un cadre de pile, enfoncé dans le fil de la pile de la machine virtuelle Java.

Pensez à pourquoi il en est ainsi? Parce que la méthode sayHello a commencé à exécuter la méthode de salutation et variables locales de la table de méthode message d'accueil cadre de pile il y a une variable « greet », qui est une méthode locale salutation variable.

La figure suivante illustre ce processus:

Ensuite, si la méthode « salut » est terminé, il mettra la méthode « salut » donne la pile de cadre de pile correspondant de la pile de la machine virtuelle Java, et si la méthode « sayHello » est terminé, il mettra des méthodes « sayHello » sauté de la pile dans la machine virtuelle Java.

Ceci est la machine virtuelle Java dans la machine virtuelle Java empile le rôle de ce composant.

Nous devons nous rappeler c'est: Lorsque vous appelez l'une des méthodes, la méthode sera de créer un cadre de pile, puis la pile.

Est mémorisée dans le cadre de pile de données de classe locale correspondant à la méthode de variables, y compris d'autres informations, ce procédé est réalisé après le procédé est terminé sur la pile.

5. la mémoire de tas Java

JVM, il y a un autre domaine critique, le tas Java est utilisé pour stocker toutes sortes d'objets que nous avons créés dans le code, comme le code suivant:

enseigner public void (String name) {

étudiant étudiant = nouvel étudiant (nom);

student.study ();

}

Ce qui précède « nouvel élève (nom) » pour créer une instance d'objet d'un type d'étudiant, cette instance d'objet qui contiendra des données. Les objets comme cet étudiant, seront stockés dans la mémoire de tas Java.

Ensuite, la méthode de la liste de cadre local pile variable, ce type de référence « étudiant » stocke l'adresse des variables locales l'objet de l'étudiant. Vous pouvez penser à la table variable locale du « étudiant » pointant vers le tas d'objets Java étudiants.

La figure suivante illustre ce processus:

6. La zone de procédé / Metaspace

Cette méthode est la zone la version précédente 1.8 JDK, la machine virtuelle Java au nom d'une région dans la même classe des élèves principalement mis de leurs propres informations, des informations sur les différents types d'utilisation normale, il est placé dans cette région, mais aussi il y aura des choses semblables sur une piscine constante de cette région.

Mais après 1.8 JDK, a changé le nom de cette région, appelée le « Metaspace », il peut être considéré comme un « espace méta-données » Cela signifie, bien sûr, toujours stocker divers types d'informations liées à notre.

7. piles de méthodes natives

Dans beaucoup de l'API sous-jacente dans le JDK, tels que IO liées, liées NIO, réseau Socket concerné, si l'on regarde le code source à l'intérieur de lui, vous trouverez beaucoup d'endroits ne sont pas du code Java.

Beaucoup d'endroits aller à la méthode native d'appeler des méthodes à l'intérieur du système d'exploitation local, sont susceptibles d'être appelé c méthode de langue, ou des bibliothèques de bas niveau, comme par exemple les éléments suivants:

natif public int hashCode ();

Lorsque cet appel de méthode native, il y aura des méthodes natives correspondant à la pile de fil, qui est la pile de la machine virtuelle Java avec un similaire, mais aussi pour stocker des informations table variable locale une variété de méthodes natives et similaires.

A ce propos, il n'y a pas commencer à parler, nous avons la possibilité d'écrire des articles de suivi consacrés.

8. segment de mémoire externe

Il y a aussi une région, la machine virtuelle Java n'appartiennent pas, par le NIO allocateDirect cette API, nous pouvons allouer de l'espace mémoire dans le tas des opérations Java externe, et tas et de référence de la mémoire par la machine virtuelle Java dans le DirectByteBuffer.

De nombreuses techniques sont utilisées de cette manière, parce qu'il ya des scénarios, l'allocation de mémoire de tas externe peut améliorer les performances.

9. Résumé complet

Enfin, faire un petit résumé:

  • Lorsque le code Java JVM fonctionne par le biais de première ligne par ligne compileront les instructions de bytecode
  • Ensuite, dans le processus de mise en uvre, aux méthodes d'appel, la pile sera créé par la machine virtuelle Java pour chaque trame de la pile de la méthode, pousser et sauter, et il existe une méthode de cadre de pile variable locale.
  • Pour créer un objet, il est attribué à la mémoire de Java pour aller
  • Pour le stockage de ces informations seront placés dans des régions de la zone de procédé / Metaspace Lane
  • En outre, il existe deux régions spécifiques:
  • piles de méthodes natives : Exécuter des méthodes natives, lorsqu'il est utilisé dans la pile, avec la pile de la machine virtuelle Java est similaire
  • mémoire externe Heap : Fermenter en tas Java en dehors de l'espace mémoire alloué pour stocker des objets.
« VEUX UN « » Nouvelles 190617 gingembre Daniel, même les photos sont prises dans l'aéroport de Illustrated » l'artisan Illustré "
Précédent
190617 « défi ultime », selon les séquences enregistrées frappé Zhang Yixing mis en scène « lunettes tuer »
Prochain
Bonne réputation aux gardes, mais le score a été rapidement réduit à de mauvais films, c'est le visage battu cresson d'un plus impitoyable
Le premier semestre de cette année, le marché des terres de Beijing ont été vendus 33 terrains résidentiels et l'utilisation des terres au chiffre d'affaires total de 86,865 milliards de yuans
Silicon Motion Display Agylstor M.4 NVMe prototype SSD
Hong Kong Wireless Fab Five aura, ne pas oublier il y a de nouveaux Fab Five, vous savez les deux derniers chiffres vache
Maldives - La Chine Amitié Nuit Marques de réception
PAN joué par six, les cinq premiers sont la vraie beauté, seul le dernier du ciel laid
Realtek RT5261 show: SD soutien accord express
« Célébration du 45e anniversaire de la Malaisie-Chine des relations diplomatiques, réunion célèbre peinture Malaisie » a eu lieu à Kuala Lumpur
« TFBOYS « » Nouvelles Xi Yi 190616 éperlan un millier de style micro-blog de grandes soirées cinéma de course sur la route merci avant d'encouragement les plus sincères
« Antidrogue 2 » devrait dépasser un milliard, Andy Lau, le nouveau film ne peut toujours pas échapper un mot « misérable »
190616 Xi Yi avait une odeur d'un millier de style micro-blog de grandes soirées cinéma de course sur la route merci avant d'encouragement les plus sincères
Qui a dit que les films de Hong Kong est mort? Avec ces cinq choses à surveiller, « anti-drogue 2 » veulent bien paraître est à l'abri