java的四种引用类型
1.强引用
- 把一个对象赋给一个引用变量,这个引用变量就是一个强引用。
- 引用变量存储在栈中,对象存储在堆中
- 当方法运行完成后,方法会退出方法栈,引用不存在,对象就会被回收
- 如果这个引用是全局变量,就需要在不用这个对象时将其赋值为null,因为强引用不会被垃圾回收
- 由于强引用的对象不会被垃圾回收,当虚拟机内存不足时会抛出OOM错误
2.软引用
- 用SoftReference类实现
- 当一个对象只有一个软引用,内存足够时,GC不会回收;内存不足时,GC就会回收它
- 软引用适用于实现内存敏感的高速缓存,例如浏览器的后退按钮
3.弱引用
- 用WeakReference类实现
- 只要GC机制一执行,不管内存够不够,都会回收该对象占用的内存
4.虚引用
- 用PhantomReference类实现
- 不能单独使用,必须和引用队列联合使用
- 主要作用是跟踪对象被垃圾回收的状态