Java垃圾回收的依据是:是否还有引用.
什么是引用呢 ?
jdk1.2 之前的定义是:
若reference类型的数据中存储的数值代表一块内存的起始地址、则这块内存代表一个引用
jdk1.2 之后进行了扩充:
分为
强引用
、软引用
、若引用
、虚引用
.
如何定义 ?
强引用 (strong reference)
: 程序代码中普遍存在的、类似 Object obj = new Object()
这类的引用, 只要引用还在、永远不会被回收掉的对象
软引用 (soft reference)
:描述一些还有用、但不是必须的对象. 软引用关联的对象、在系统将要发生OOM
前会对这些对象进行一次回收、若回收能够产生足够的空间、则不会发生OOM
, 回收完成依然没有足够的空间才会抛出OOM
异常, JDK1.2
之后、系统提供了SoftReference
来实现软引用
弱引用 (weak reference)
: 也是非必须对象、比软引用的引用更弱一些、被弱引用关联的对象只能生存到下次gc发生之前、当垃圾收集器工作时、无论当前内存是否足够、都会回收掉只被弱引用关联的对象
JDK1.2
之后提供了WeakReference类
来实现弱引用
虚引用 (Phantom reference)
: 一个对象是否有虚引用的存在、完全不影响其生存时间、也无法通过虚引用来取得一个对象的实例、设置虚引用的唯一目的就是能在整个对象进行垃圾收集时收到一个系统通知
网友评论