Java的四种引用之强弱软虚
Posted zwbg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java的四种引用之强弱软虚相关的知识,希望对你有一定的参考价值。
在java中提供4个级别的引用:强引用、软引用、弱引用和虚引用。除了强引用外,其他3中引用均可以在java.lang.ref包中找到对应的类。开发人员可以在应用程序中直接使用他们,其中FinalReference意味着“最终”引用,它用以实现对象的finalize()方法。
1 强引用
强引用就是程序中一般使用的引用类型,强引用的对象是可触及的,不会被回收。相对的,软引用、弱引用和虚引用的对象是软可触及的、弱可触及的和虚可触及的,在一定条件下,都是可以被回收的。
强引用示例:StringBuffer sb = new StringBuffer("Hello world");
假设以上代码是在函数体内运行的,那么局部变量sb将被分配在栈上,而对象StringBuffer实例被分配在堆上。局部变量sb指向StringBuffer实例所在堆空间,通过sb可以操作该实例,那么sb就是StringBuffer实例的强引用。
强引用的特点:
- 强引用可以直接访问目标对象
- 强引用所指向的对象在任何时候都不会被系统回收,虚拟机宁愿抛出OOM异常,也不会回收强引用所指的对象。
- 强引用可能导致内存泄漏
2 软引用----可被回收的引用
软引用是比强引用弱一点的引用类型,一个对象只持有软引用,那么当堆空间不足时,就会被回收。软引用使用java.lang.ref.SoftReference类型
特点:
GC未必会回收软引用的对象,但是当内存资源紧张时,软引用对象会被回收,所以软引用对象不会引起内存溢出。
3 弱引用-----发现即回收
4 虚引用----对象回收跟踪
一个持有虚引用的对象,和没有引用几乎一样。
它的作用主要是跟踪垃圾回收过程
以上是关于Java的四种引用之强弱软虚的主要内容,如果未能解决你的问题,请参考以下文章