在java中提供了4个级别的引用:强引用、软引用、弱引用、虚引用。其中强引用FinalReference是default个饰符来修饰,其它3个级别均为public修饰。
- 强引用(FinalReference),在java中,有点像C++的指针,通过引用,可以对堆中的对象进行操作。强引用具备以下特点:
- 强引用可以直接访问目标对象;
- 强引用所指向的对象在任务时候都不会被系统回收;
- 强引用可能导致内存泄露。
- 软引用(SoftReference),软引用对象,在响应内存需要时,由垃圾回收器决定是否清除此对象。一个持有软件引用的对象,不会被JVM很快回收,只要有足够的内存,软件引用便可能在内存中存活相当长的时间,软引用对象最常用于实现内存敏感的缓存;
- 弱引用(WeakReference),弱引用是一种比较弱的引用类型,在系统GC时,只要发现弱引用,不管系统堆内存是否足够,都会将对象回收;
- 虚引用(PhantomReference),虚引用是所有引用最弱的一个,一个持有虚引用的对象,和没有引用几乎是一样的,随时都可能被垃圾回收器回收。