弱引用什么时候被回收_Java中的强软弱虚引用
- 强引用 StrongReference
- 软引用 SoftReference
- 弱引用 WeakReference
- 虚引用 PlantomReference
对于强引用,我们平时在编写代码时经常会用到。而对于其他三种类型的引用,使用得最多的就是软引用和弱引用,这2种既有相似之处又有区别。它们都是用来描述非必需对象的,但是被软引用关联的对象只有在内存不足时才会被回收,而被弱引用关联的对象在JVM进行垃圾回收时总会被回收。
在使用软引用和弱引用的时候,我们可以显示地通过System.gc()来通知JVM进行垃圾回收,但是要注意的是,虽然发出了通知,JVM不一定会立刻执行,也就是说这句是无法确保此时JVM一定会进行垃圾回收的。
1 强引用
- 在java中,new一个Object(对象)存放在堆内存,然后用一个引用指向它,这就是强引用。
- 如果一个对象具有强引用,那垃圾回收器绝不会回收它。
- 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题
2 软引用
如果一个对象只具有软引用,则内存空间足够时,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存
也就是内存溢出之前进行回收
2.1 代码使用方法
//创建对象(obj 此时的引用为强引用)Object obj = new Object();//构建关联软引用SoftReference sf = new SoftReference(obj);//释放强引用obj = null;//获取刚刚创建的对象//get方法用来获取与软引用关联的对象的引用,如果该对象被回收了,则返回nullsf.get();//有时候会返回null//这时候sf是对obj的一个软引用,通过sf.get()方法可以取到这个对象,当然,当这个对象被标记为需要回收的对象时,则返回null;
3 弱引用
弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期
也就是第二次垃圾回收时回收
每次执行GC的时候,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象
3.1 代码使用方法
//创建对象Object obj = new Object();//构建关联弱引用WeakReference wf = new WeakReference(obj);//释放强引用obj = null;//有时候会返回null//弱引用是在第二次垃圾回收时回收,短时间内通过弱引用取对应的数据,可以取到,当执行过第二次垃圾回收时,将返回null。wf.get();//返回是否被垃圾回收器标记为即将回收的垃圾//弱引用主要用于监控对象是否已经被垃圾回收器标记为即将回收的垃圾,可以通过弱引用的isEnQueued方法返回对象是否被垃圾回收器标记。wf.isEnQueued();
4 虚引用
垃圾回收时回收,无法通过引用取到对象值
形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收
//创建对象Object obj = new Object();//构建关联虚引用PhantomReference pf = new PhantomReference(obj);//释放强引用obj=null;//永远返回null//虚引用是每次垃圾回收的时候都会被回收,通过虚引用的get方法永远获取到的数据为null,因此也被成为幽灵引用。pf.get();//返回是否从内存中已经删除//虚引用主要用于检测对象是否已经从内存中删除pf.isEnQueued();
弱引用什么时候被回收_Java中的强软弱虚引用相关推荐
- Java中的强软弱虚引用《对Java的分析总结三》
<对Java的分析总结>-Java中的强软弱虚引用 强引用 StrongReference 软引用 SoftReference 弱引用 WeakReference 虚引用 PlantomR ...
- java虚引用作用_深入理解Java中的引用(二)——强软弱虚引用
深入理解Java中的引用(二)--强软弱虚引用 在上一篇文章中介绍了Java的Reference类,本篇文章介绍他的四个子类:强引用.软引用.弱引用.虚引用. 强引用(StrongReference) ...
- 强软弱虚引用,只有体会过了,才能记住
以前学习强软弱虚引用的时候,只是走马观花看看博客,并没有自己写代码去实践.去证明,导致每次看完后,过不了多久就忘了,后来下定决心,一定要自己敲敲代码,这样才能让印象更加深刻,古人云:纸上得来终觉浅,绝 ...
- 【重难点】【Java基础 01】一致性哈希算法、sleep() 和wait() 的区别、强软弱虚引用
[重难点][Java基础 01]一致性哈希算法.sleep() 和wait() 的区别.强软弱虚引用 文章目录 [重难点][Java基础 01]一致性哈希算法.sleep() 和wait() 的区别. ...
- java中的强软弱虚_详解Java的四种引用——强软弱虚,颠覆你的认知!
强软弱虚 java中的数据被类型分为了两类,它们分别是基本类型和引用类型.一般我们new出来的对象都属于引用类型的范畴.我们知道java是有垃圾回收机制的一种语言,根据垃圾回收时的策略,java将对于 ...
- 回过头来看对象的四种状态强软弱虚引用的理解
一.对象的四种引用状态描述 在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference).软引用(Soft Reference).弱引用(Weak Refe ...
- 【Java】强软弱虚四种引用,弱引用在ThreadLocal中的应用
Java中的引用类型 - 强软虚弱 1.强引用(StrongReference) Object strongReference = new Object(); 只要有引用指向它,就不会被回收.当内存空 ...
- java判断对象已经被回收_Java中JVM判断对象已死的基本算法分析
原标题:Java中JVM判断对象已死的基本算法分析 jvm中 有各种的垃圾收集器,每个收集器都有各自的算法. 但是一切的根本都需要找到找到应该被消除的对象,理解如何找到死亡对象才是理解垃圾收集器的基础 ...
- 强软弱虚---强引用、软引用、弱引用、虚引用
博客出自:http://blog.csdn.net/liuxian13183 1.概述 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触 ...
- 多线程与高并发(五):强软弱虚四种引用以及ThreadLocal的原理与源码
上节回顾 AQS(CLH的变种) 因为新加进来的节点要查看前面的节点的状态,所以使用的是双向链表. AQS的底层是 CAS + Volitile,用CAS替代了锁整个链表的操作. 公平锁:上来先排队 ...
最新文章
- poj 2352 Stars(线段树)
- Visual Studio 2010Beta与Silverlight的更新
- caffe在线可视化(转)
- 前端小结(5)---- iframe
- python --动态类型
- Nginx upstream性能优化
- 2018年湖南居民人均可支配收入25241元 出行餐饮成消费热点
- 计算机监控网络运维合同书,网络服务托管运维合同范本
- android 5.1一键root工具箱,一键root大师
- C#获取汉字的区位码的方法
- 海康大华等传统摄像机的RTSP流通过拉转GB/T28181输出级联到国标流媒体服务平台
- idea 安装 jclasslib 插件
- Python中的嵌套循环
- 树莓派4B(4G/8G)安装Ubuntu18.04桌面版+ROS(Melodic)+Realsense SDK(T265+D400系列)
- python脚本控制ios手机app_appium 下 python 脚本自动化测试iOS APP 实例
- 桂电深信服CTF之MSC真假压缩包
- 少儿编程是不是智商税
- java实现回文数算法
- 游戏引擎设计 - 粒子系统
- 中国嫦娥升空了,美国登月神话破产了
热门文章
- 在售后技术服务里,Kubernetes到底是什么? | 凌云时刻
- OpenStack Rocky Octavia 的实现与分析(零)架构简介
- 最新的ndkr20编译c_Android NDK-r20 交叉编译 FFmpeg 4.2
- 【数学建模】基于matlab GUI弱肉强食问题—Volterra 模型【含Matlab源码 1502期】
- 【优化算法】混合蛙跳优化算法(SFLA)【含Matlab源码 1472期】
- 【语音识别】基于matlab GUI HMM 1~9数字语音识别(带面板)【含Matlab源码 1393期】
- 【优化覆盖】基于matlab移动网格求解无线传感器网络节点覆盖优化问题【含Matlab源码 1300期】
- 【VRP】基于matlab蚁群算法求解多配送中心的车辆调度问题【含Matlab源码 1098期】
- 【优化算法】鸽群优化算法(PIO)【含Matlab源码 1077期】
- 使用nginx负载均衡的webservice wsdl访问不到_Nginx 反向代理、负载均衡图文教程,写得太好了!...