介绍
J
ava 2
平台中引入
java.lang.ref
包(其中包含
SoftReference
、
WeakReference
、
PhantomReference
和
ReferenceQueue
类)。
SoftReference
、
WeakReference
、
PhantomReference
都是弱引用,他们的强弱程度依次是
SoftReference->
WeakReference->PhantomReference
(由强到弱)。
-
SoftReference
类
软引用
的原理是:在保持对对象的引用时保证在
JVM
报告内存不足情况之前将清除所有的软引用。关键之处在于,垃圾收集器在运行时可能会(也可能不会)释放软可及对象。对象是否被释放取决于垃圾收集器的算法以及垃圾收集器运行时可用的内存数量。
-
WeakReference
类
垃圾收集器运行时如果碰到了弱可及对象,将释放
WeakReference
引用的对象。然而,垃圾收集器可能要运行多次才能找到并释放弱可及对象。
-
PhantomReference
类
PhantomReference
类只能用于跟踪对被引用对象即将进行的收集。同样,它还能用于执行
pre-mortem
清除操作。
PhantomReference
必须与
ReferenceQueue
类一起使用。需要
ReferenceQueue
是因为它能够充当通知机制。当垃圾收集器确定了某个对象是虚可及对象时,
PhantomReference
对象就被放在它的
ReferenceQueue
上。将
PhantomReference
对象放在
ReferenceQueue
上也就是一个通知,表明
PhantomReference
对象引用的对象已经结束,可供收集了。这使您能够刚好在对象占用的内存被回收之前采取行动。
-
ReferenceQueue
类
当某个弱引用对象的可达性被垃圾搜集器改变或清除后或将要清除时,会被放入对应的
ReferenceQueue
中(如果存在对应的引用队列的话)。
总结
弱引用机制是和垃圾回收机制紧密相关的,实际上就是用来和垃圾回收器交互的一个手段。目的是为了让垃圾回收器在适当的时候回收掉一些不需要的对象引用,释放内存,从而使
Java
的内存管理机制更加高效。
参考资料
Understanding
Weak References
学习如何有效地使用
SoftReference
、
WeakReference
和
PhantomReferen
ce
用软引用阻止内存泄漏
分享到:
- 2009-02-18 10:45
- 浏览 1176
- 评论(0)
- 论坛回复 / 浏览 (0 / 3622)
- 查看更多
相关推荐
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...
引用(Reference)类型 52 存储器分配和布局 53 this引用 55 Java编码约定 56 运算符的优先级 58 升级和表达式的类型转换 62 独立实践 70 第五章:数组 71 学习目标 71 数组的描述 72 创建数组 72 多维数组 78 拷贝...
JVM规范--高手总结 Java相关 1 1.1Java定义 1 1.2Java的开发流程 1 1.3Java运行的原理 2 1.4半编译半解释 3 1.5平台无关性 4 JVM内存模型 4 2.1 JVM规范 5 2.2 Sun JVM 8 2.3 SUN JVM内存管理(优化) 10 2.4 SUN JVM...
Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æ...
2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 ...
Java 虚拟机面试题全面解析,《深入理解Java虚拟机》干货版,自己总结,希望能够帮助大家,免费下载~什么是类加载机制? 虚拟机和物理机的区别是什么? 运行时栈帧结构 Java方法调用 什么是方法调用? Java的方法调用,...
【架构】简单描述MVC模式 120 【架构】RPC的介绍 121 什么叫RPC 121 RPC流程 121 【架构】SOA介绍 122 【Redis】redis五种常见的数据类型详解 123 String字符串类型 124 List列表类型 126 Set集合类型 128 Hash散列...
word源码java ![head](README/head.png) BWiOSPackage iOS Continuous Integration Github: Contents iOS Xcode Project Xcode打包 脚本打包 iOS ipa包 持续集成 自动化测试 Reference 经验总结 Follow Me iOS ...
JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>......
验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven 2.3.4. 在FreeBSD或OpenBSD上安装Maven 2.4. 验证Maven...
<<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 ... 比尔....这一天 微软公司正式推出了其下一代...
作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...