在Java中,对象的引用类型分为四种:强引用、软引用、弱引用、虚引用
强引用:正常情况下声明的对象皆为强引用,在强引用环境下,垃圾回收时需要严格判断当前对象是否被强引用,如果被强引用,则不会垃圾回收。
软引用:软引用一般被作为缓存使用,软引用在垃圾回收时,虚拟机会根据当前系统的剩余内存来决定是否对软引用进行回收,如果内存比较紧张,虚拟机则会回收软引用对应的空间。
弱引用:与软引用类似,不同的是,弱引用在进行垃圾回收时,是一定会被回收掉的。
虚引用:虚引用不会决定对象的生命周期,如果对一个对象仅持有虚引用,则是没有任何意义的,虚引用必须和引用队列联合使用。虚引用主要用来跟踪对象被虚拟机回收的活动,当虚拟机回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把该对象加到引用队列中(在finalize之后),之后可以通过判断引用队列中是否有对象来得知对象即将被回收。
引用类型 | 被垃圾回收时间 | 用途 | 生存时间 |
---|---|---|---|
强引用 | 从来不会 | 一般状态 | JVM停止 |
软引用 | 在内存不足时 | 缓存 | 内存不足时 |
弱引用 | 在垃圾回收时 | 缓存 | 一次回收过后 |
虚引用 | 无 | 跟踪回收活动 | 无 |