Maison >Java >javaDidacticiel >Une introduction comparative aux références fortes, aux références souples, aux références faibles et aux références virtuelles en Java

Une introduction comparative aux références fortes, aux références souples, aux références faibles et aux références virtuelles en Java

不言
不言avant
2019-02-11 11:08:402955parcourir

Cet article vous apporte une introduction comparative aux références fortes, aux références douces, aux références faibles et aux références virtuelles en Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Référence forte

Si un objet a une référence forte, le garbage collector ne le récupérera jamais. Lorsque l'espace mémoire est insuffisant, la machine virtuelle Java préfère le lancer. une erreur OutOfMemoryError, provoquant la fin anormale du programme, et ne résoudra pas le problème de mémoire insuffisante en recyclant aléatoirement des objets avec des références fortes.

SoftReference

S'il y a suffisamment d'espace mémoire, le ramasse-miettes ne le récupérera pas ; s'il n'y a pas suffisamment d'espace mémoire, la mémoire de ces objets le sera ; être récupéré. Tant que le garbage collector ne le récupère pas, l'objet peut continuer à être utilisé par l'application. Les références logicielles permettent une mise en cache sensible à la mémoire.

Weakreference

Les objets avec uniquement des références faibles ont un cycle de vie plus court. Le thread garbage collector analyse la zone mémoire qu'il régit pendant le processus, une fois par an. Un objet avec seulement des références faibles est découvert, sa mémoire sera récupérée, que l'espace mémoire actuel soit suffisant ou non. Cependant, le garbage collector est un thread avec une très faible priorité, il ne trouvera donc pas nécessairement ces objets rapidement. seulement de faibles références.

Référence virtuellePhantomReference

La référence virtuelle ne détermine pas le cycle de vie de l'objet. Si un objet ne contient qu'une référence fantôme, alors il n'a pas de références Like. , ils peuvent être recyclés à tout moment.

File d'attente de référence ReferenceQueue

La file d'attente de référence peut être utilisée en conjonction avec des références logicielles, des références faibles et des références virtuelles. Et les références virtuelles doivent être utilisées en conjonction avec. files d'attente de référence. Si l'objet référencé par une référence logicielle (référence faible ou référence virtuelle) est récupéré, la machine virtuelle Java ajoutera cette référence à la file d'attente de référence qui lui est associée.

        String reference = "hello";
        //引用队列
        ReferenceQueue<String> queue = new ReferenceQueue<>();
        //弱引用
        WeakReference<String> softReference = new WeakReference<String>(reference,queue);
        reference = null;
        //取出弱引用持有的String对象
        String str = softReference.get();
        //取出引用队列中保存的引用对象
        Reference<? extends String> poll = queue.poll();

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer