这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战
前言
大家好,这是本周的第二天,这次我带大家认识一下java的四种引用,大家天天new 对象的,应该对对象这个东西很熟练了吧,但是你知不知道你new 出来的这个对象你是怎么找到它的呢?
强引用
强引用,在java中是最重量级的一个,也是我们经常使用的一个,只要你new 对象那么这就等于在堆中开辟了一片空间,开辟完空间后A的的引用地址就是new 后的地址了。这是new的简单过程,但是我们今天讲的重点不是这个,而是引用种类,有这几种种类是因为JVM中的一个GC(垃圾回收器)的存在。
强引用的对象是永远不会被GC的,你只要不断地强引用的生成对象,你就会得到一个OOM了,但是你如果真的需要多个对象,但是在更换对象的过程某些对象确实不需要了,那你就可以把那个对象的引用置为 null这样它下次就会被GC掉了。也就是Object A = null;
String A = new String(“a”);
Integer B = new Integer(1);
软引用
软引用,在java中也就针对强引用软一点,其他程度上比其他引用要持久的多。软引用生成后是否被GC回收掉取决于jVM的内存占用,如果GC清理其他引用后内存依旧过高,那么GC就要拿软引用动刀子了,不然GC是不会对软引用回收的。这就是软引用的特性。
弱引用
弱引用与软引用不同,虽然听名字感觉两者相差不多,但是在GC上它们没有被一视同仁,GC只要发现弱引用,那么就会清除掉弱引用来给jvm降低内存使用。如果弱引用被清除了,它会被放到弱引用队列里面,程序员可以调用弱引用队列来查看那些弱引用被回收了。
虚引用
虚引用也是幽灵引用顾名思义,就是不存在的引用,它出生就为null,GC发现也是会抓走然后回收掉的。
总结
- 强大于软大于弱大于虚
- 虚引用 = null
- 软引用 与 弱引用多用于缓存对象