Maison > Java > javaDidacticiel > le corps du texte

Introduction détaillée à JAVA Virtual Machine (JVM) (3) - Mécanisme de récupération de place

王林
Libérer: 2019-08-24 14:21:57
avant
2672 Les gens l'ont consulté

Comme nous l'avons dit dans l'article précédent, la gestion automatique de la mémoire est divisée en deux parties : l'allocation de mémoire aux objets et la récupération de la mémoire allouée aux objets. Dans cet article, nous parlons de cette dernière, c'est-à-dire du recyclage de la mémoire allouée à l'objet. Le recyclage de la mémoire nécessite l'utilisation d'un mécanisme de garbage collection, dont le nom anglais est GC (Garbage Collection).

Dans cette partie, nous devons résoudre les questions suivantes :

1. Quelle mémoire doit être recyclée ?

2. Quand sera-t-il recyclé ?

3. Comment recycler ?

Quelle mémoire faut-il recycler ?

La mémoire dans la zone du tas et de la méthode doit être recyclée, et le reste n'a pas besoin d'être recyclé.
Parce que seuls le tas et la zone de méthode sont partagés par les threads, et le reste "vit et meurt" avec le thread Lorsque le thread se termine, la mémoire sera naturellement recyclée, alors ne vous inquiétez pas pour eux.

Quand sera-t-il recyclé ?

(1) Dans le tas :

Lorsque l'objet "meurt", il faut le recycler. Qu'est-ce que cela signifie que l'objet est mort ? Il n'y a tout simplement pas d'endroit pour le référencer, c'est inutile. Alors comment savoir s'il est mort ?

Il existe deux méthodes :

Algorithme de comptage de références

Ajouter un compteur de références à l'objet Chaque fois qu'il y a un endroit qui le référence, le. compteur La valeur est +1. Lorsque la référence échoue, la valeur du compteur est -1. Lorsque la valeur du compteur est 0, cela signifie que l'objet n'est plus référencé, c'est-à-dire "il peut mourir".

Mais cela présente un inconvénient, qui est le problème des références circulaires. Comme le montre la figure ci-dessous, même si les deux objets du tas sont inutiles, ils ne peuvent pas être recyclés car ils font référence l'un à l'autre et la valeur du compteur est au moins égale à 1.

Introduction détaillée à JAVA Virtual Machine (JVM) (3) - Mécanisme de récupération de place

Analyse d'accessibilité

Tous les objets générés sont des sous-arbres d'une racine appelée "GC Roots". En partant des racines GC et en cherchant vers le bas, le chemin parcouru par la recherche est appelé la chaîne de référence. Lorsqu'un objet n'a pas de chaîne de référence aux racines GC pouvant être atteinte, l'objet est dit inaccessible, c'est-à-dire qu'il peut être recyclé par GC. Il s'agit d'une méthode couramment utilisée en Java.

Tout comme les objets non référencés dans le tas sur la photo ci-dessous, ils peuvent être recyclés.

Introduction détaillée à JAVA Virtual Machine (JVM) (3) - Mécanisme de récupération de place

Comment déterminer si un objet possède encore une référence ? Il existe quatre types de références en Java :

Référence forte : Object o=new Object() Tant que la référence forte existe, le GC ne récupérera jamais l'objet référencé.

Référence logicielle : décrit certains objets utiles mais pas nécessaires. Lorsque le système est sur le point de déborder de mémoire, celle-ci sera recyclée.

Référence faible : Tant que la GC est effectuée, elle sera recyclée.

Référence virtuelle : Il s'agit de la relation de référence la plus faible. Une instance d'objet ne peut pas être obtenue via une référence virtuelle. Sa fonction est de recevoir une notification système lorsque cet objet est recyclé par le collecteur.

(2) Dans la zone méthode :


On sait que ce qui est stocké dans la zone méthode a été chargé par le machine virtuelle Informations de classe, constantes, variables statiques, code compilé par le compilateur juste à temps et autres données. Nous effectuons donc un garbage collection dans la zone méthode, recyclant certaines constantes abandonnées et classes inutiles.

Comment déterminer si une constante est obsolète ?

Il suffit de regarder le décompte des références. Si aucun objet ne fait référence à la constante, cela signifie que la constante a été abandonnée et peut être recyclée.

Comment déterminer si un cours est inutile ?

Il existe trois situations :

a. Toutes les instances de cette classe ont été recyclées.

b. Le ClassLoader qui a chargé cette classe a été recyclé.

c. L'objet java.lang.Class correspondant à cette classe n'est référencé nulle part, et les méthodes de cette classe ne sont accessibles par réflexion nulle part.

Comment recycler ?

Il existe 4 algorithmes en tant que théories :
• Algorithme de marquage-balayage
• Algorithme de copie
• Algorithme de marquage-collation
• Algorithme de collecte générationnelle

Il existe 5 types de collecteurs comme implémentations :

Introduction détaillée à JAVA Virtual Machine (JVM) (3) - Mécanisme de récupération de place

Postscript

Débordement de mémoire : le système ne peut pas allouer plus Retirez l'espace dont vous avez besoin. Par exemple, plus de mémoire ne peut être allouée aux nouveaux objets dans le tas, et si la pile est pleine, de nouvelles trames de pile ne peuvent pas être placées sur la pile.

Fuite de mémoire : Si la mémoire est occupée par un objet et n'est pas restituée, on parle de fuite de mémoire.

Ce qui précède est une explication détaillée du mécanisme de récupération de place dans JVM. Pour plus de questions connexes, veuillez visiter le site Web PHP chinois : Tutoriel vidéo JAVA

.

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!

Étiquettes associées:
jvm
source:csdn.net
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal