Maison  >  Article  >  Java  >  Java Virtual Machine Learning - Force de référence d'objet

Java Virtual Machine Learning - Force de référence d'objet

黄舟
黄舟original
2017-02-17 10:34:021422parcourir

Qu'il s'agisse de déterminer le nombre de références à un objet grâce à un algorithme de comptage, ou de déterminer si la chaîne de référence d'objet est accessible grâce à un algorithme de recherche de racine, déterminer si un objet est vivant est lié aux "références ".

Les références sont principalement divisées en quatre types : référence forte, référence douce, référence faible et référence fantôme. La force de la référence diminue fortement dans l'ordre.

Citation forte :


fait référence à quelque chose d'omniprésent dans le code, similaire à : "Object objectRef = new Object", ce type de référence ne sera jamais nettoyé par GC tant que la référence forte existe toujours.

Référence logicielle :

est utilisé pour décrire certains objets qui sont utiles mais n'existent pas nécessairement lorsque la Jvm manque de mémoire (. avant le débordement de mémoire) sera recyclé S'il n'y a toujours pas assez d'espace après l'exécution de GC, une exception de débordement de mémoire sera levée.

Les références logicielles sont implémentées via la classe SoftReference. SoftReference est très approprié pour implémenter la mise en cache. De plus, lorsque le GC estime que le SoftReference numérisé n’est pas fréquemment utilisé, il peut être recyclé.

Utilisation :


		User user = new User();
		SoftReference<Object> softReference  = new SoftReference<Object>(user);
		softReference.get();

Référence faible

Il en va de même pour référence faible Utilisé pour décrire certains objets qui sont utiles mais qui n'existent pas nécessairement. Sa force sera plus faible que celle des références logicielles. Les objets associés à des références faibles ne peuvent survivre que jusqu'au prochain GC, que la mémoire fonctionne ou non. est suffisant, les objets associés aux références faibles seront recyclés. JDK implémente cela via la classe WeakReference.

Une fois obtenu, il peut être obtenu via la méthode lowReference.get, qui peut renvoyer null

Vous pouvez transmettre un objet ReferenceQueue au constructeur WeakReference Lorsque l'objet de référence est représenté comme recyclable, isEnqueued renvoie vrai


                User user = new User();
		WeakReference<User> weakReference = new WeakReference<User>(user);
		weakReference.get();
		
		ReferenceQueue<User> referenceQueue = new ReferenceQueue<User>();
		WeakReference<User> weakReference2 = new WeakReference<User>(user, referenceQueue);
		//当引用对象被标识为可回收时  返回true,  即当user对象标识为可回收时,返回true
		weakReference.isEnqueued();

Référence factice

La référence factice est appelée "référence fantôme", c'est la relation de référence la plus faible. Le fait qu'un objet ait une référence virtuelle n'affectera pas du tout le temps de survie. Le seul but de la définition d’une association de référence virtuelle pour un objet est de recevoir une notification système lorsque l’objet est recyclé par le GC. Implémenté via la classe PhantomReference.

Il convient de noter que la méthode phantomReference.get renvoie toujours null Lorsque l'utilisateur est supprimé de la mémoire, l'appel à isEnqueued retournera true


<.>
		User user = new User();
		ReferenceQueue<User> referenceQueue = new ReferenceQueue<User>();
		PhantomReference<User>  phantomReference = new PhantomReference<User>(user, referenceQueue);
		//即当user对象标识为可回收时,返回true
		System.out.println(phantomReference.isEnqueued());
		//永远返回null
		System.out.println(phantomReference.get());

Autres classes associées :


		WeakCache weakCache  = new WeakCache();
		SoftCache softCache = new SoftCache();
		WeakHashMap weakHashMap  = new WeakHashMap();


Lorsque le mécanisme de collecte des ordures est en cours d'exécution, analysez la relation de référence, GC traitera ces trois types de références différemment, en termes simples, GC déterminera d'abord si la référence analysée est un type de référence et si l'objet auquel il fait référence n'a pas de référence forte. , L'objet est considéré comme étant du type Référence correspondant. Plus tard, lors du garbage collection, ces objets seront traités en conséquence en fonction des différents types Référence.

Ce qui précède est le contenu de l'apprentissage de la machine virtuelle Java - force de référence d'objet Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !



Déclaration:
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