WeakReference回收问题
WeakReference回收问题
这个类算是一种标记,和C的指针给人的感有点像,但是起的作用可能比指针要大。我们都知道,java虚拟机的垃圾回收算法为可达性分析算法,即在回收垃圾前对垃圾进行分析和标记,然后这个标记的过程就是关键。
亲爱的朋友,我们都知道WeakReference是在下一次gc的时候会将WeakReference所指向的内容回收,然后SoftReference则是在full gc的时候才会将指向的内容回收,那么问题就来了。reference真的这么蠢吗?也就是如果不仅仅只有reference引用了对应的实例,在可达性分析算法的root节点依然有对于这个实例的引用,这种情况下,reference通过get的结果会是空吗?
怎么可能会是空呢?我们理一下逻辑就可以知道,其实所谓reference的作用其实就仅仅是在回收的时候提供一个标记,即如果在一般gc的情况下,发现某个实例有被softreference引用,那可达性分析就会判定这个对象不应该被回收,即其起到的作用大概可以被归纳为两点:
- SoftReference可以拯救在gc中本应该被回收的实例
- WeakReference可以确保一些实例在不需要的时候,及时地被抛弃
看看如下的例子,看看输出结果,相信你会有答案的。
class TestReferecnce {@Test@Throws(Exception::class)fun testSomething() {var urlPatternTest:UrlPatternTest? = UrlPatternTest()val reference = WeakReference(urlPatternTest)reference.get().doIfNotNull { println("target exist") }println("execute gc")System.gc()reference.get().doIfNotNull { println("target exist") }reference.get().doIfNull { println("target not exist") }println("\n\nexecute gc after set null")urlPatternTest = nullSystem.gc()reference.get().doIfNotNull { println("target exist") }reference.get().doIfNull { println("target not exist") }}
}
target exist
execute gc
target existexecute gc after set null
target not existProcess finished with exit code 0
WeakReference回收问题相关推荐
- hutool使用 WeakReference
Full GC .Major GC和 Minor GC有什么不同 我们见过很多 GC 名词如:Minor GC.Young GC.Full GC.Old GC.Major GC.Mixed GC等. ...
- 深入探讨 java.lang.ref 包
http://www.ibm.com/developerworks/cn/java/j-lo-langref/ 概述 Java.lang.ref 是 Java 类库中比较特殊的一个包,它提供了与 Ja ...
- java ref object_深入探讨 java.lang.ref 包
概述 Java.lang.ref 是 Java 类库中比较特殊的一个包,它提供了与 Java 垃圾回收器密切相关的引用类.这些引用类对象可以指向其它对象,但它们不同于一般的引用,因为它们的存在并不防碍 ...
- WeakReference:防止内存泄漏,要保证内存被虚拟机回收。
首先我们来看一段代码 public class AutoActivity extends Activity { Handler handler = new Handler(){public void ...
- Android 弱引用 (WeakReference)的使用
1 弱引用 (WeakReference) 弱引用对象,这些对象不会阻止对其引用对象进行终结,终结和回收.弱引用最常用于实现规范化映射.假设垃圾收集器在某个时间点确定对象是弱可到达的.到那时,它将自动 ...
- JVM:垃圾回收相关概念
文章目录 System.gc()的理解 内存溢出与内存泄漏 内存溢出(OOM) 内存泄漏(Memory Leak) Stop The World 垃圾回收的并行与并发 并发(Concurrent) 并 ...
- 假期三天,我肝了万字的Java垃圾回收,看完你还敢说不会?
大家好,我是狂聊,上一篇已经把 Jvm 的运行区数据和类加载机制聊完了. 今天来说说 Java 垃圾回收,高频面试问题. 提纲附上,话不多说,直接干货 1.什么是垃圾回收? 垃圾回收(Garbage ...
- Java-JVM虚拟机内存垃圾回收机制gc入门:引用类型,对象标记算法,回收算法,常见的 garbage collector
文章目录 GC的优缺点 引用的四种类型 对象标记算法 引用计数法 可达性分析法 回收算法 标记-清除算法(Mark-Sweep) 复制算法 标记-整理算法(Mark-Compact) 分代收集算法 常 ...
- Java内存回收机制基础[转]
原文链接:http://blog.jobbole.com/37273/ 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了J ...
最新文章
- 简单实现ConfigurationManager.AppSettings[]效果存储系统变量
- Linux Shell命令能力倾向问题和解答
- 小红旗图标在excel如何输入_excel数据核对技巧:如何用函数公式标识输入正误...
- mac 本地安装mysql_mac 本地安装mysql服务
- Error creating object Microsoft Data Access Components 2.1 (or later) have been properly installed
- 【JavaScript 封装库】BETA 1.0 测试版发布!
- C++迭代器(STL迭代器)
- Oxygen XML Editor Professional文档的强大工具
- Xmarks不会关闭了,太好了!
- DNS污染是什么意思?DNS污染解决方案
- gprs模块与服务器通信协议,gprs模块与服务器通信原理分析
- apple id是什么意思
- 关于 vue3.0 实战项目 setup、 props、 reactive、ref
- 2010年显卡行业大事
- 带你了解Google搜索引擎的竞价排名是怎样实现的?
- 诓”妹妹与“旺”夫君
- java中sql查重跟去重_sql中查重和去重
- uvm register model
- Android开发软件Eclipse安装教程
- 【机器学习】详解 ResNeSt
热门文章
- 安卓4.4.4安装哪个微信版本_微信一个开关,速度立马提升一倍
- 欢迎使用CSDN-markdown编辑器·211
- Android怎么设置主活动,如何从另一个活动启动Android AppWidget的配置活动?
- php点选按钮ajax,php – 在单选按钮上显示div中的数据单击ajax
- 3d饼图 vue_这是我见过最优雅的Vue图片轮播插件——Vue-Awesome-Swiper
- Elasticsearch-PHP实战操作
- 【高级Java架构师系统学习】java问答社区系统
- Android移动开发之【Android实战项目】activity生命周期与Java中@Override的作用
- python【蓝桥杯vip练习题库】ADV-136大数加法(高精度加法)
- vant weapp 多选上传图片_iPhone竟然可以压缩图片?一秒1.7MB瞬间变0.08MB,太逆天了吧...