Java引用的种类
---恢复内容开始---
距离第一篇貌似有很久了,md拖延症越来越严重了,不过每天十点多下班回家到家就十一点多了,就只想睡觉了。不瞎bb了,直接上干活。主要想记录一下关于java引用。
搞java的应该对引用这个词非常非常熟悉不过了,记得刚入门java的时候,这个词就一直伴随着我们。在java中又一个非常重要的东西那就是GC,对于gc来说,判断一个对象是否可回收的标志就在于该对象是不是还在被引用(关于gc下次专门记录一波),jvm为了更好的管理对象的引用,在lang.ref包下面有三个类:SoftReference,PhantomReference,WeakReference。分别代表软引用,虚引用和弱引用。
那么总结下来,java是不是只有这三种引用呢?那答案就是no,是4种。还有天天用的强引用。可能很多人天天在不停的new对象,而不知道它叫强引用。下面分别逐一简单介绍这四种引用
强引用:我们每天不停的new的对象,是最常见的引用方式,比如,Person p = new Person(); 那么p就是一个强引用变量。由于jvm不会回收强引用引用的对象,所以强引用是java造成内存泄漏的主要原因之一。
软引用:是通过SoftReference实现,如果一个对象只具有软引用时,他有可能会被gc回收(注意用词,有可能),当系统的内存空间足够时,他也不会被回收,当空间不够时,将会被回收。
弱引用:弱引用和软引用有点类似,主要差别就是弱引用的周期要更短一些,引用级别更低,用weakReference实现,只要发生gc的时候,不管内存够不够用,弱引用都会被gc掉。
虚引用:软引用和弱引用都是能拿过来单独使用的,但是虚引用不可以,它主要的作用就是跟踪对象被垃圾回收的的状态,程序可以通过check和虚引用关联的引用queue是不是一件包含指定的虚引用,从而来了解所引用的对象是不是被回收。系统是没有办法通过虚引用来获得被引用的对象。个人觉得虚引用意义不是很大,了解有这么一个东西即可。