刀郎歌曲-万搏客户端-官网

引荐阅览:

  1. 秋招面试总标签11结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等
  2. 面试BAT 却被小小字符串秒杀?这13道题帮你一举打败字符串算法题
  3. 面试败给Redis?一次性给刀郎歌曲-万搏客户端-官网你总结:高频面试+学习笔标签3记+标签17思想导图等

01 前语

为了了解ThreadLocal,把握引证的概念对错常有必要的。

02 引证与目标

java中咱们经过一个引证指向内存中目标。

//创立一个引证,引证能够独立存在,并不一定需求与一个目标相关
User user;
user = new User();

user是引证, 经过‘=’指向了内存中的目标。

03 四种引证

JDK1.2后,依据对目标的引证强度不同,将引证分为4种类型。

(1)强引证:

平常运用最多,最遍及的引证。

U标签20ser user;
user = new User();//强引证
  • user便是强引证
  • 堆中的User目标实例,便是“被运用”;

只需user 指向 User目标。Us标签3er目标就不会被收回。

user = null;断开了引证,User目标不可达,会被收回。

(2)软引证:

咱们能够经过SoftReference来界说一个软引证

SoftReference softRef=new SoftReference(new User());//软引证
  • 假如一个目标只需软引证,内存满足时,GC时不收回他。假如内容空间缺乏时,就会收回被软引证指向的目标内存。
  • 只需没有别收回,还能够运用

解说下:目标只需软引证 目标有两种引证的状况

User user = new User();//强刀郎歌曲-万搏客户端-官网引证SoftReference softRef=new SoftReference(user);//软引证

目标只需软引证状况

SoftReference softRef=new SoftReference(new User());//软引证

User user = new User();//强引证SoftReference softRef=new SoftReference(user);//软引证
user = null;//断刀郎歌曲-万搏客户端-官网开了强引证。 此刻只需软引证。

软引证可与引证行列(ReferenceQueue)联合运用,在创立软引证时,相关ReferenceQueue。假如软引证引证的目标被收回时,Java虚拟机会把这个软引证加入到与之相关的引证行列中。

软引证可用作内存灵敏的高速缓存。

(3)弱引证:

能够经过WeakReference来界说一个弱引证

WeakReference<> wea标签19k = new We刀郎歌曲-万搏客户端-官网akReference<>(new User());//界说一个软引证指向堆内User目标
  • 假如目标只需弱引证,GC时,不论内存是否满足。都会收回,弱引证指向的目标。

弱引证也可与引证行列(ReferenceQueue)联合运用,在创立弱引证时,相关ReferenceQueue。假如弱引证引证的目标被收回时,Java虚标签17拟机会把这个弱引证加入到与之相关的引证行列中。

ThreadLocal 中运用到了弱引证。

(4)虚引证:

虚引证是最弱的引证,弱到,不能用弱引证访问到目标。

能够经过Phan标签14tomReference来界说一个虚引证。

虚引证,首要用来盯梢目标被废物收回器收回的活动。标签1

虚引证有必要与引刀郎歌曲-万搏客户端-官网用行列(ReferenceQueue)一同运用,当废物收回器预备收回一个目标时,假如发现它还有虚引证,就会在收回目标的内存之前,把这个虚引证加入到与之 相关的引证行列中。咱们能够依据引证是否在行列中,来判别目标的收回活动。

(5)为什么需求不同的引证类型

咱们看出引证强度的不同,目标的生命周期不同,废物收回战略丰厚,有利于更好的办理目标内存。


04 总结:

  • 引证与目标的生命周期相关。
  • 目标能够被多种类型的,多个引证指向,但只需有一个强引证。废物收回器不收回。

要害时了解: 一个目标,能够被多种类型引证一起指向,强度最高的决议他的生命周期

留意:刀郎歌曲-万搏客户端-官网这儿的内存应该是指“堆内存”,而且区别引证类型根本类型

//Stri刀郎歌曲-万搏客户端-官网ng user ="user";//Strin标签17g user = new String("user");SoftReference softRef=new SoftReference(user);WeakReference weak = new WeakReference(user);
user=null;
System.out.println(softRef.get());
System.gc();
System.out.println(weak.get());


作者:wuqinduo
原文链接:h标签5ttps://juejin.im/post/5dc3700ef265da4d270b4864

Write a Comment

电子邮件地址不会被公开。 必填项已用 *标注