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/ 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...
随机推荐
- xcode 执行时模拟器不可选的问题
好久没写博客了,上一次是什么时候都想不起来了. 之前总认为脑袋记住了,用过了就能够了,干嘛要写博客,简直浪费时间.事实上没事写写博客优点还是挺多的.这样既能够对自己用过的和学到的东西做一个总结,也能提 ...
- Java中String直接赋字符串和new String的区别
解析Java中的String对象的数据类型 1. String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ...
- DBSNMP和SYSMAN用户初始密码及正确的修改方式
SYSMAN和DBSNMP跟涉及到Oracle的EM,所以跟其他的用户修改密码方式有所区别. 下面是这两个用户的默认密码和作用说明 DBSNMP DBSNMP The account used by ...
- php使用session来保存用户登录信息
php使用session来保存用户登录信息 使用session保存页面登录信息 1.数据库连接配置页面:connectvars.php <?php //数据库的位置 define('DB_HOS ...
- NFinal简介
NFinalWeb框架是基于魔法糖语法思想创建的框架.本框架有两大特点.1.所有框架里最简单易学易配置的.2.所有框架里运行效率最快的. 相关介绍1.运行效率比任何php和java以及.net框架要快 ...
- FullCalendar 的学习笔记(一)
前一段时间,一个老项目需要新增一个小功能,日程表~ 于是网上找了下,发现FullCalendar这个控件还不错于是就拿来用了下,下面简单介绍下我的学习笔记. 首先就是了解下FullCalendar的A ...
- Oracle更改字符集
更改oracle的字符集: sqlplus / as sysdba SQL> shutdown immediate; Database closed. Database dismounted. ...
- poj 3158kickdown
我是来吐槽poj的!!! 第一次做poj,被题目中的输入输出格式打败了 ,醉了醉了 Description A research laboratory of a world-leading autom ...
- QSS 样式表 (一)
在开发应用程序时,往往对界面的美观有一定的要求.Qt 引入了 QSS 机制,使得界面的美化工作变的轻轻松松.嗯,QSS听着有点耳熟.是的,QSS的语法和CSS类似.在此做些总结. 先来看一个简单的例子 ...
- fddd
<script language="JavaScript" type="text/javascript"> function exportChart ...