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.
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.
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.
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.
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.
② l'âge est généré et initialisé à 10.
(3) La méthode de multiplication est exécutée et la zone de pile est générée.
(4) L'argument de multiplication est généré et initialisé avec la valeur passée.
(5) la valeur est générée et le résultat de l'opération est remplacé.
⑥ 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.
(7) Le résultat de l'exécution de la méthode de multiplication est affecté à l'âge.
⑧ La méthode principale est terminée et les variables utilisées dans la méthode principale sont supprimées.
C'est tout pour cet article.
Merci pour votre visite.
Recommended Posts