Java 强引用,软引用,弱引用_a.一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间_jltxgcy的博客-程序员宅基地

技术标签: Java语言  

1、强引用

     public void handleMessage(Message msg) {
	
	        case FAIL:
		         GoplayException mException = new GoplayException();
		         setVideoUrlFailReason(mException);
		         mListener.onFailed(mException);
		         break;
     }

   protected void setVideoUrlFailReason(GoplayException mResult) {
   ......
   }


   public void onFailed(GoplayException e) {
   .....
   }


     首先创建了一个强引用对象,mException首先指向堆内存的地址。引用计数为1。

     setVideoUrlFailReason,又有一个局部变量mResult指向了同样堆内存地址。引用计数为2。

     随着setVideoUrlFailReason函数的结束, 引用计数减少1,目前为1。

     mListener.onFailed,又有一个局部变量e指向同样堆内存地址,引用计数加1,目前为2。

     随着onFailed函数结束,引用计数减1,目前为1。

     最后随着handleMessage函数结束,引用计数减1,目前为0。

  

     强引用对象只有引用计数为0,或者被赋值为null,java垃圾回收器才会回收。

     强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题

2、软引用

     如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。

     使用软引用:

MyObject aRef = new  MyObject();  
SoftReference aSoftRef=new SoftReference(aRef);  
      从软引用中获取对象:

MyObject anotherRef=(MyObject)aSoftRef.get();

3、弱引用

      弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

      使用弱引用:

MyObject aRef = new  MyObject();  
SoftReference aSoftRef=new WeakReference(aRef);  

      从弱引用中获取对象:

MyObject anotherRef=(MyObject)aSoftRef.get();

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jltxgcy/article/details/35558465

智能推荐

047_Divider分割线_vue divider_自由与束缚JavaJavaScript的博客-程序员宅基地

1. Divider分割线1.1. Divider分割线区隔内容的分割线。1.2. Divider Attributes 参数 说明 类型 可选值 默认值 direction 设置分割线方向 string horizontal / vertical horizontal con_vue divider

jeecg单体启动_jeecgboot 单体框架_罗小爬EX的博客-程序员宅基地

目录源代码目录结构单体启动后端前端本地启动前端打包发布build默认账号密码参考:http://www.jeecg.com/JeecgBoot开发文档https://github.com/jeecgboot/jeecg-boot源代码目录结构项目结构├─ jeecg-boot-parent(父POM: 项目依赖、modules组织)│ ├─ jeecg-boot-base(共通模块: 工具类、config、权限、查询过滤器、注解、接口等)│ ├─ jeecg-boot-module-d_jeecgboot 单体框架

MRP 自动创建PO_cuihui8525的博客-程序员宅基地

12月24日(星期四) 一,前期准备:参阅之前两篇文章 A. 了解时间栅栏(Time Fence)的概念, B. 了解MRP自动发放计划单(Planned Order)..._mrp跑po

jq05--强大的jq事件(事件处理)、on()、bind()、delegate()、hover()_muzidigbig的博客-程序员宅基地

1. jQuery事件机制jQuery的事件机制,指的是:jQuery对JavaScript操作DOM事件的封装,包括了:事件绑定、事件解绑、事件触发。最主要的特点:可以给DOM对象绑定多个事件2. jQuery事件的发展历程(了解)简单事件绑定(单个事件 <详见jq04>) >> bind事件绑定 >> delegate事件绑定 >> on【...

Ipython使用指南_weixin_30670925的博客-程序员宅基地

一、简介  2001年,Fernando Perez为了得到一个更为高效的交互式Python解释器而启动的一个项目,IPython不仅仅是一个加强版的shell,他可以直接进行绘图操作的GUI控制台,一个基于web的交互式笔记本,以及一个轻量级的快速并行计算引擎。  ipython是一个升级版的交互式python命令行工具.二、ipython安装 一、在已有Python环境安装...

随便推点

python中eval, exec, execfile,和compile_寒木的博客-程序员宅基地

eval(str [,globals [,locals ]])函数将字符串str当成有效Python表达式来求值,并返回计算结果。同样地, exec语句将字符串str当成有效Python代码来执行.提供给exec的代码的名称空间和exec语句的名称空间相同.最后,execfile(filename [,globals [,locals ]])函数可以用来执行一个文件,看下面的例子:>>

教你用AI Studio+wechaty+阿里云白嫖一个智能微信机器人_wechaty 购买_愚昧之山绝望之谷开悟之坡的博客-程序员宅基地

教你用AI Studio+wechaty+阿里云白嫖一个智能微信机器人前言这绝对是全网最细教程,没有之一右上角有Fork功能,还有点赞功能,你懂的项目展示1. 搞定云服务器部分我这里是用的阿里云的云服务器,你也可以用其他的比如腾讯云的、华为云的等等。1.1 注册一个阿里云账号并完成实名认证阿里云官网: https://account.aliyun.com/1.2 点击底部的免费试用1.3 点击右下角了解试用1.4 选择一款产品1.5 选择操作系统为Ubuntu, 点击_wechaty 购买

华清远见智能小车视频服务器,华清远见版世界杯足球对抗赛,智能小车C位出道..._九变若恒的博客-程序员宅基地

哎,听说了吗?前天德国输了听说了,简直扎心,不想接着看了,感觉人生失去了方向世界杯不看了,可以看华清远见版世界杯足球对抗赛啊听说还有视频彩蛋呢!那还等啥啊,走,看看去!4年一次的世界杯,简直就是全世界人民的X药,大家的high点开始同步,仿佛世界大同了。球场上队员们的一举一动,都成了地球人津津乐道的谈资。每到世界杯,你在每天早晨总会看见一帮疯子,他们满眼血丝、黑眼圈沉重,但眼睛里却散发出异样兴奋的..._华清远见智能小车

Hibernate @OneToOne懒加载实现解决方案_@onetoone lazy_wangpeng047的博客-程序员宅基地

在hibernate注解(三)中,我提高过一对一(@OneToOne)懒加载失效的问题。虽然给出了解决方法,但并没有给出完整的解决方案。今天我专门针对该问题进行讨论。至于懒加载失效的原因,在之前的文章中已经我已经叙述过了,就不再重复了,不明白的可以去看看。_@onetoone lazy

webgl渲染Yuv420P图像-程序员宅基地

Yuv420P格式在安防视频中非常常见,因为H264或者H265解码之后,就是这种格式。YUV定义了三个分量:“Y”表示明亮度(Luminance或Luma)也就是灰度值。U和V表示色度。..._webgl播放yuv420

开发语言与Windows开发工具汇总_weixin_34008784的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ...

推荐文章

热门文章

相关标签