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();
Java 强引用,软引用,弱引用的更多相关文章
- Java强,软,弱,虚类型
链接 http://wiseideal.iteye.com/blog/1469295
- 01_Java 软、弱引用语法介绍
文章导读: 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用, 本章内容介绍了Reference的概 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- Java:对象的强、软、弱、虚引用
转自: http://zhangjunhd.blog.51cto.com/113473/53092 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无 ...
- Java中四种引用:强、软、弱、虚引用
这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...
- Java:对象的强、软、弱和虚引用
1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...
- Java对象的强、软、弱和虚引用详解
1.对象的强.软.弱和虚引用 转自:http://zhangjunhd.blog.51cto.com/113473/53092/ 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无 ...
- java基础知识再学习--集合框架-对象的强、软、弱和虚引用
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangjunhd.blog.51cto.com/113473/53092 本文 ...
- Java对象的强、软、弱和虚引用原理+结合ReferenceQueue对象构造Java对象的高速缓存器
//转 http://blog.csdn.net/lyfi01/article/details/6415726 1.Java对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变 ...
- Java:对象的强、软、弱和虚引用[转]
原文链接:http://zhangjunhd.blog.51cto.com/113473/53092/ 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...
随机推荐
- Mysql日期函数,时间函数使用的总结
一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now();+--------------------- ...
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...
- Android应用程序注冊广播接收器(registerReceiver)的过程分析
前面我们介绍了Android系统的广播机制,从本质来说,它是一种消息订阅/公布机制,因此,使用这样的消息驱动模型的第一步便是订阅消息:而对Android应用程序来说,订阅消息事实上就是注冊广播接收器, ...
- Unity 切割导出精灵
Unity中经常使用到精灵,尤其是2D游戏中制作动画等!今天我们就学习下精灵的切割和导出吧! 废话不多说,先建议空的工程. 1,打开Unity建工程. 2 导入素材进行资源分类,工程不在于大小,这是我 ...
- UINavigationController 导航控制器
一.导航视图控制器 1.管理视图控制器 2.控制视图控制器之间的跳转 3.是以压栈和出栈的形式来管理视图控制器 4.导航视图控制器必须要设置根视图控制器 5.导航是视图控制器包含UINavigatio ...
- 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问
1.首先你要确定你有一个外网ip地址.如果你分配到的是一个局域网IP地址需要经过一系列的转换为外网ip地址,然后继续下面操作. 2.拿到外网IP地址,进行tomcat的server.xml文件的配置. ...
- _ConnectionPtr.CreateInstance(__uuidof(Connection))“不支持此接口”错误解决
最近在换了win7 64位的系统,今天突然发现以前写的ADO连接数据库的代码编译后在windows2003下会执行到: _ConnectionPtr.CreateInstance(__uuidof(C ...
- ZendFramework 两种安装方式
1. 在线安装(基于composer) Zend 应用程序骨架 GitHub 地址: https://github.com/zendframework/ZendSkeletonApplication ...
- Python学习(四) Python数据类型:序列(重要)
插播一下,先了解一下Python的数据类型,Python现有的数据类型有好多,最重要的有列表.元组.字典 列表:我觉得可以对应java中的数组 list=['physics', 'chemistry' ...
- postgresql配置的一些问题
ubuntu通过软件中心安装后,配置文件位于如下目录 我用超级用户创建了其它数据库用户,发现是登录不了的,必须还得创建同名的linux用户,甚是麻烦.在配置文件pg_hba.conf中发现了问题. 其 ...