Java Reference

Java Reference

Reference

Java中的Reference对象和GC是紧密联系在一块儿的,Reference的实现也是和GC相关的。 spa

强引用

强引用是Java中使用最广泛的引用,咱们常常使用的Object o = new Object(),这里的o就是强引用。若是一个对象具备强引用,那么GC是必定不会回收这个引用的,它宁愿抛出OutOfMemeryError,也不会随意回收具备强引用的对象。 线程

软引用

软引用(SoftReference)在Java中一般用做内存敏感的Cache。被软引用引用的对象,当没有其余强引用存在时,GC并不会当即回收此对象,而是当内存不够的时候,才会考虑回收。因此若是内存充足,此对象会一直存在于内存中,能够被程序使用,用做Cache是再合适不过了。若是咱们使用强引用做为内存Cache,那么当内存不够的状况下,做为Cache的这一部份内存是不会被GC回收的;而使用软引用的话,内存不够时,GC能够回收这一部份内存。因此使用软引用做为内存Cache能够不限大小,并且也不用考虑remove操做。 对象

弱引用

弱引用(WeakReference)和软引用的区别在于,被弱引用引用的对象,当没有其余强引用或软引用存在时,无论内存是否充裕,此对象都会被GC回收。固然可能不会立马被回收,由于GC线程优先级比较低。 队列

虚引用

虚引用(PhantomReference)是一种特殊的引用,主要用来跟踪对象呗垃圾回收的状态,经过查看引用队列里是否包含对象所对应的虚引用来判断它是否即将被垃圾回收,从而采起行动。它并不被期待用来取的被引用的对象,而是对象被回收前,他的引用会被放入一个ReferenceQueue中,从而达到跟踪对象垃圾回收的做用。 内存

不一样引用区别

强引用 - 直接调用被引用对象,不被GC回收,可能致使内存泄露。 rem

软引用 - get()方法,视内存状况被GC回收,不会致使内存泄露。 get

弱引用 - get()方法,永远被GC回收,不可能致使内存泄露。 垃圾回收

虚引用 - 没法取得,不回收,可能致使内存泄露。 引用

相关文章
相关标签/搜索