本文共 715 字,大约阅读时间需要 2 分钟。
强引用:
一般声明对象是虚拟机生成的引用.
强引用环境下,垃圾回收时需要严格判断当前对象是否被强引用;即如果被强引用,则不会被垃圾回收,垃圾回收器情愿跑出内存溢出异常。
软引用
软引用一般被做为缓存来使用。
与强引用的区别是,软引用在垃圾回收时,虚拟机会根据当前系统的剩余内存来决定是否对软引用进行回收。如果剩余内存比较紧张,则虚拟机会回收软引用所引用的空间;如果剩余内存相对富裕,则不会进行回收。 换句话说,虚拟机在发生OutOfMemory(内存溢出)时,肯定是没有软引用存在的。
弱引用
弱引用与软引用类似,都是作为缓存来使用。
但与软引用不同,弱引用在进行垃圾回收时,是一定会被回收掉的,因此其生命周期只存在于一个垃圾回收周期内。
虚引用
虚引用是每次垃圾回收的时候都会被回收,通过虚引用的get方法获取到的数据永远为null,因此也被成为幽灵引用。
虚引用主要用于检测对象是否已经从内存中删除。 垃圾回收时回收,无法通过引用取到对象值。
总结
引用类型 | 被回收时间 | 用途 | 生存时间 |
---|---|---|---|
强引用 | 从来不会 | 对象的一般状态 | JVM停止运行 |
软引用 | 内存不足时对象缓存内存(溢出)不足时 | ||
弱引用 | JVM垃圾回收时 | 对象缓存 | GC运行后 |
虚引用 | JVM垃圾回收时 | 跟踪对象的垃圾回收 | 垃圾回收后终止 |
强引用不用说,我们系统一般在使用时都是用的强引用。
而“软引用”和“弱引用”比较少见。他们一般被作为缓存使用,而且一般是在内存大小比较受限的情况下做为缓存。 因为如果内存足够大的话,可以直接使用强引用作为缓存即可,同时可控性更高。 因而,他们常见的是被使用在桌面应用系统的缓存。
转载地址:http://xzumf.baihongyu.com/