1.什么是引用
如果一个Reference类型的数据里面装的是另外一块内存的起始地址,就说这块内存代表着一个引用。
这种定义纯粹但是比较狭隘。在这个定义下,对象只有被引用和没有被引用 两种状态,没有中间状态。
为了保证高效实用jvm内存(达到当内存空间足够的时候,对象不会被回收。当内存空间不足的时候,我们可以抛弃部分引用) jdk1.2后引进了强引用(Strong Reference),软引用(Soft Reference),弱引用(Weak Reference),虚引用(Phantom Reference)。
2.jdk中的引用类型
-
强引用: 类似于
Object b = new Object()
这类引用,只要强引用存在,垃圾收集器永远不会回收被引用的对象。 - 软引用: 用于描述一些有用,但是非必需的对象。对应软引用关联的对象。在系统将要发生内存溢出的时候,会把这些对象列入可回收的范围内 并且进行第二次回收。如果这次内存回收还是没有足够内存,才会抛出内存溢出异常。
- 弱引用: 用于描述一些有用,但是非必需的对象。但是强度比软引用更加弱。弱引用的对象只会存活到下一次gc之前。
- 虚引用:如果一个对象与GC Roots之间仅存在虚引用,则称这个对象为虚可达(phantom reachable)对象。
网友评论