强引用,软引用,弱引用,幻象引用有什么区别?

强引用,软引用,弱引用,幻象引用有什么区别?

不同的引用类型,主要体现的是对象的不同的可达性(reachable)状态和对垃圾收集的影响。

  • 所谓强引用 (Strong Reference) 就是我们常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还活着,垃圾回收不回收这种对象

  • 软引用,是一种相对强引用弱化一些的引用,只有当 JVM 认为内存不足时,才会试图回收软引用指向的对象。JVM 会确保在排除 OutOfMemoryError 之前,清理软引用指向的对象,软引用通常用来实现内存敏感的缓存,如果还有空闲内存,就可以暂时保留缓存,当内存不足时,清理掉,这样就保证了使用缓存的同时,不会耗尽内存。

  • 弱引用,比软引用拥有更短的生命周期,在垃圾回收线程扫码所管辖的内存区域的过程中,一大发现了只具有弱引用的对象,不管当前内存空间是否足够,都会回收它的内存,由于垃圾回收器是一个优先级,因此不一定很快发现那些只有弱引用的对象。

  • 虚引用,形同虚设 ,虚引用不会决定对象的生命周期,如果一个对象仅持有虚引用,其实就和没有任何引用一样。在任何时候都可能被垃圾回收器回收。
    虚引用和软引用的一个区别是,虚引用必须和引用队列(ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加

你可能感兴趣的:(实战,Java,并发编程)