Qu'est-ce que JVM (Java Virtual Machine)?

Qu'est-ce que JVM (Java Virtual Machine)?

--JVM est une abréviation de Java Virtual Machine, qui est un logiciel requis pour exécuter des programmes Java.

Il peut être exécuté quel que soit le type de CPU ou d'OS. En d'autres termes, dans le processus qui s'exécute sur l'OS, le code d'octet obtenu en compilant le code Java est converti en un langage machine que l'OS correspondant (Windows, OS X, Linux, etc.) peut comprendre (analyser) et exécuter.

JVM pour divers OS

Untitled.png

Configuration JVM

Si vous regardez les choses en gros, il y a les quatre suivantes.

Configuration JVM

Untitled (1).png

Class Loader

En Java, lorsque vous créez un code source, un fichier .java est généré comme Test.java. Lorsque le compilateur Java compile la source java, un fichier .class (code d'octet) comme Test.class est généré. Le chargeur de classe assume le rôle d'assembler le ** fichier de classe généré de cette manière et de charger la ** zone de données d'exécution **, qui est la zone de mémoire donnée par le système d'exploitation.

Execution Engine

Garbage Collector

Runtime Data Area

Structure de la zone de données d'exécution

캡처.PNG

Method area

--La zone de méthode est une zone où les informations de classe sont gérées pour chaque classe utilisée dans le programme.

Heap area

Stack area

PC Register

Native method stack

Lorsque le fil est créé

Tous les threads partagent la zone de méthode et la zone de tas La zone de pile, les registres PC et la pile de méthodes natives sont créés pour chaque thread et ne sont pas partagés.

Heap area & Garbage Collector Dans cet article, la zone Heap est une cible importante de GC, alors regardons de plus près. (La zone de pile et la zone de méthode sont également soumises à GC.)

La zone Heap se compose de 5 zones (eden, survivor1, survivor2, old, permanent).

Jusqu'au JDK7, la zone permanente existait en tas. A partir de JDK8, la zone permanente a disparu et une partie de celle-ci a été transformée en "zone de méta-espace". (La figure ci-dessus est basée sur JDK7.) La zone de méta-espace est maintenant incluse dans la zone de pile native.

(Il est important que les chiffres de la zone des survivants n'aient pas de sens et soient divisés en deux.)

La raison pour laquelle la zone Heap est divisée en 5 est que GC fonctionne efficacement. Je voudrais expliquer les détails en regardant le processus de GC.

GC est divisé en GC mineur et GC majeur

* GC mineur: GC effectué dans la nouvelle zone

  1. Lorsque l'objet est créé pour la première fois, il sera créé dans la zone Eden.
  2. Le premier GC est fait lorsque la zone Eden est pleine d'objets.
  3. La mémoire de la zone Eden est copiée dans la zone survivor1 telle quelle. Supprimez ensuite les objets dans les autres zones sauf la zone survivor1.
  4. Lorsque la zone Eden et la zone survivant1 sont pleines, recherchez les objets créés dans la zone Eden et les objets générés dans la zone survivant1 référencés.
  5. Laissez les objets non référencés tels quels et copiez uniquement les objets référencés dans la zone survivor2.
  6. Supprimez les objets dans les autres zones à l'exception de la zone survivor2.
  7. Les objets qui sont référencés plus d'un certain nombre de fois dans le flux ci-dessus sont déplacés de la zone survivor2 vers l'ancienne.

* GC majeur (GC complet): GC effectué dans l'ancienne zone

  1. Inspectez tous les objets de la zone Ancien pour voir s'ils sont référencés.
  2. Collectez les objets non référencés et supprimez-les tous à la fois.

Et si le GC majeur (GC complet) est terminé? ??

Vérifie les objets non référencés dans la zone Ancien et supprime tous les objets applicables. Dans ce cas, il sera supprimé dans la zone de mémoire du tas et de l'espace mémoire libre sera créé, mais une reconfiguration est effectuée pour éliminer cette mémoire libre. (Organisation de la mémoire) ** Ainsi, tous les threads sont arrêtés pour empêcher d'autres threads d'utiliser la mémoire lors de la reconfiguration de la mémoire. ** **

référence

Recommended Posts

Qu'est-ce que JVM (Java Virtual Machine)?
Qu'est-ce que 'java
Qu'est-ce que Java <>?
Qu'est-ce que 'java
Qu'est-ce que l'encapsulation Java?
Qu'est-ce que la technologie Java?
Qu'est-ce que Java API-java
[Java] Qu'est-ce que flatMap?
[Java] Qu'est-ce que ArrayList?
Qu'est-ce que l'assertion Java? Résumé.
Qu'est-ce qu'une collection Java?
[Java] Qu'est-ce que jaee j2ee?
[Java] Qu'est-ce que l'héritage de classe?
[Notions de base Java] Qu'est-ce que la classe?
Qu'est-ce que l'analyse Java Escape?
Qu'est-ce que Thread Safe (avec Java)
[Java] Qu'est-ce que l'exception de modification simultanée?
Qu'est-ce qu'une expression lambda (Java)
Qu'est-ce qu'une classe en langage Java (3 /?)
Quelle est la meilleure lecture de fichier (Java)
Qu'est-ce qu'une classe en langage Java (1 /?)
Qu'est-ce que Java et l'environnement de développement (MAC)
Qu'est-ce qu'une classe en langage Java (2 /?)
Quelle est la méthode principale en Java?
Qu'est-ce que Cubby
[Java] Configuration JVM
Qu'est-ce qui est nul? ]
Qu'est-ce que Keycloak
Qu'est-ce que maven?
Qu'est-ce que Jackson?
Qu'est-ce que soi
Qu'est-ce que Jenkins
Qu'est-ce que ArgumentMatcher?
Qu'est-ce que IM-Juggling?
Qu'est-ce que les paramètres
Qu'est-ce que SLF4J?
Qu'est-ce que la façade? ??
Qu'est-ce que Gradle?
Qu'est-ce que POJO
Qu'est-ce que centOS
Qu'est-ce que RubyGem?
Qu'est-ce que before_action?
Qu'est-ce que Docker
Qu'est-ce que Byte?
Qu'est-ce que Tomcat
Qu'est-ce que le modèle Java Servlet / JSP MVC?
Quel est le modificateur volatile pour les variables Java?
voiture de machine d'état de Java
Qu'est-ce que l'assemblage Maven?
Qu'est-ce que `docker-compose up`?
Qu'est-ce qu'un constructeur
Qu'est-ce que vue cli
Qu'est-ce qu'une interface
Qu'est-ce que le moi de Ruby?
Qu'est-ce que le codage en dur?
Qu'est-ce qu'un flux
Qu'est-ce que l'attr_accessor de Ruby?