Java对象的引用包括:强引用,软引用,弱引用,虚引用,Java中提供这四种引用类型主要有两个目的:
- 可以让程序员通过代码的方式决定某些对象的生命周期。
- 有利于JVM进行垃圾回收。
1、强引用(StrongReference)
强引用的对象,只要有引用变量指向它们,它们就不会被垃圾回收。如果内存不足,不足够在堆中分配这些内存,那么JVM将抛出OutOfMemory。
2、软引用(SoftReference)
软引用对象在内存充足时执行gc不会被回收,也不会放到引用队列。
软引用对象在内存不足时会被自动回收,并放到引用队列中。
3、弱引用(WeakReference)
弱引用对象在内存充足时执行gc会被回收,也会放到引用队列中。
弱引用对象在内存不足时会被自动回收,并放到引用队列。
4、虚引用(PhantomReference)
虚引用在内存不足时不会被回收。
在由于其他原因引发内存模型执行gc的时候,虚引用也不会被回收,但是会被放到引用队列。
git传送门:https://github.com/First-Time/FeferenceDemo