[Développement Java] Mémoire Java

en premier

toutes les personnes. salut!

Il s'agit de 254 cm de Dream Hanks.

Cette fois, il a été mentionné petit à petit dans les articles java jusqu'à présent

Je vais facilement gérer la mémoire que je n'ai pas gérée.

Le résumé des articles Java est ici.

JVM

Avant de parler de mémoire, nous devons savoir ce qu'est une JVM.

JVM est une abréviation de «** Java Virtual Machine **» et est celui qui exécute réellement les programmes Java.

La machine virtuelle Java peut exécuter des programmes Java quel que soit le processeur ou le système d'exploitation.

Certaines des JVM sont Class Loader, Execution Engine, Garbage Collector, Runtime Data Area, etc.

Bien qu'il soit configuré, cette fois, seuls "** Garbage Collector " et " Runtime Data Area **" sont traités.

Garbage Collector

Garbage Collector est responsable de la gestion de la mémoire de la JVM.

Garbage Collector supprime la mémoire des objets qui ne sont plus utilisés.

Runtime Data Area

La zone de données d'exécution est l'espace dans lequel les données réelles sont stockées lorsque le programme Java les exécute.

Cet espace est grossièrement divisé en une zone de méthode, une zone de tas, une zone de pile, une zone de résistance PC et une zone de pile de méthode native.

Cette fois, nous ne traiterons que les zones Method, Heap et Stack.

Zone de méthode

La zone Method est une collection d'informations de classe.

Informations de champ telles que les noms de variables de champ de classe, les types de données, les informations du contrôleur d'accès,

Informations sur la méthode telles que le nom de la méthode, le type de données de retour, les arguments, les contrôles d'accès,

Zone où sont stockées les variables statiques, les variables de classe finales, etc.

Ici, la mémoire est allouée aux variables statiques lorsque la JVM exécute un programme Java,

La mémoire est libérée lorsque le programme se termine.

Ainsi, les variables statiques peuvent être utilisées n'importe où car elles restent générées pendant l'exécution du programme.

Zone de tas

La zone Heap est également divisée en plusieurs zones, mais cette fois je l'ignorerai.

La zone Heap est la zone où sont stockées les données des objets et des tableaux créés par new.

échantillon

public class ExampleCalss {
	public static void main(String[] args) {
		Human human = new Human();
	}
}

class Human {
	int age;
	String name;
}

Les informations sur les champs de la classe sont stockées dans la zone Méthode.

Lorsque vous appelez le constructeur de classe avec new, une instance est créée et stockée dans la zone Heap.

A ce moment, la mémoire est allouée aux champs de chaque instance et des valeurs peuvent être attribuées.

Et la variable de classe humaine "** human **" stocke l'adresse de cette instance. 20200929 Heap 영역 첨부자료1.png

Le rôle de Garbage Collector dans la zone Heap

Garbage Collector supprime l'espace mémoire auquel personne ne fait référence.

échantillon

public class ExampleCalss {
	public static void main(String[] args) {![20200929 Heap 영역 첨부자료2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708649/f85e9c28-dbe5-db5d-edd1-6a75a4b54065.png)

		Human human = new Human();
		human = null;
		human = new Human();
	}
}

class Human {
	int age;
	String name;
}

En regardant l'exemple ci-dessus, l'adresse mémoire pointée par human est nulle.

Et laissez l'homme créer une nouvelle instance et s'y référer.

Autrement dit, personne ne fait référence à la première instance attribuée.

Un tel espace mémoire (première instance) est la cible du Garbage Collection.

image.png

Zone de pile

Cette zone stocke des données telles que des variables locales, des arguments et des valeurs de retour.

Dans la zone Pile, les variables de type de base stockent les variables et leurs données ensemble,

Le type de référence (objet) stocke uniquement l'adresse de l'instance et les données réelles sont stockées dans la zone Heap.

La zone Pile est créée individuellement chaque fois que vous appelez une méthode.

échantillon

public class ExampleCalss {
	public static void main(String[] args) {
		int age = 10;
		age = mutiply(age, 4);
	}
	
	static int mutiply(int num1, int num2) {
		int result = num1*num2;
		return result;
	}
}

Expliquer les cas ci-dessus dans l'ordre (en ignorant les arguments)

(1) La zone Stack de la méthode principale est générée.

image.png

② l'âge est généré et initialisé à 10.

image.png

(3) La méthode de multiplication est exécutée et la zone de pile est générée.

image.png

(4) L'argument de multiplication est généré et initialisé avec la valeur passée.

image.png

(5) la valeur est générée et le résultat de l'opération est remplacé.

image.png

⑥ return est exécuté et l'exécution de la multiplication est terminée. Et les variables utilisées dans multiplier sont supprimées dans Stack.

image.png

(7) Le résultat de l'exécution de la méthode de multiplication est affecté à l'âge.

image.png

⑧ La méthode principale est terminée et les variables utilisées dans la méthode principale sont supprimées.

À la fin

C'est tout pour cet article.

Merci pour votre visite.

Recommended Posts

[Développement Java] Mémoire Java
Formation au développement Java
Environnement de développement Java
Mémo de l'environnement de développement Java
Résumé du lien de développement Java
construction d'environnement de développement Java
[Développement] Comparaison du framework Java
Guide de développement Java moderne (édition 2018)
Bases du développement Java-Pratique ③ Programmation avancée-
Environnement de développement Java (Mac, Eclipse)
Java
Premier développement Java dans Eclipse
Bases du développement Java ~ Exercice (tableau) ~
Java
[Eclipse Java] Mémo des paramètres de l'environnement de développement
Préparer l'environnement de développement Java avec Atom
Création de l'environnement de développement Play Framework 2.6 (Java)
À propos de l'environnement de développement actuel (Java 8)
Création d'un environnement de développement Java (pour Mac)
Mesure de la mémoire d'utilisation des instances en Java
Développement HTML5 par Java avec TeaVM
Environnement de développement Java (Mac, VS Code)
Installer l'environnement de développement Java sur Mac
Apprendre Java (0)
[Java] tableau
Java protégé
Préparer l'environnement de développement Java avec VS Code
Module [Java]
Tableau Java
Étudier Java ―― 9
Java scratch scratch
Astuces Java, astuces
Méthodes Java
Méthode Java
Tableau Java
[Java] ArrayDeque
java (méthode)
Journée Java 2018
Chaîne Java
[Java Spring MVC] Contrôleur de confirmation de développement
Mesure de la mémoire pour les applications Java utilisant jstat
Examiner l'utilisation de la mémoire des éléments Java
java (tableau)
Java statique
Sérialisation Java
java débutant 4
JAVA payé
Étudier Java ―― 4
Java (ensemble)
tri shell java
[Java] compareTo
Étudier Java -5
java réfléchissant 获 获 举
java (interface)
Mémorandum Java
Mémo de construction de l'environnement de développement Java sur Mac
Tableau Java
Étudier Java ―― 1
[Java] Array
[Java] Polymorphisme