引用类型 被垃圾回收时间 用途 生存时间 强引用 从来不会 对象的一般状态 JVM停止运行时终止 软引用 在内存不足时 对象缓存 内存不足时终止 弱引用 在垃圾回收时 对象缓存 gc运行后终止 虚引用 Unknown Unknown Unknown --------------------------- 强引用(new XXX(xxx)) 即使OOM也不会回收 软引用(new SoftReference(xxx)) 内存不足才会回收 可用来实现内存敏感的高速缓存 软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中 弱引用(WeakReference) 垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存 但垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象 弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中 虚引用(PhontomReference) "虚引用"顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。 虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中