Java虚拟机如何判断对象已死?(哪些内存需要回收)
来源:互联网 发布:淘宝宝贝主图大小尺寸 编辑:程序博客网 时间:2024/05/16 00:31
JVM管理的堆内存中,几乎存放了所有的对象实例,如果一个对象已经使用完毕(没有任何引用指向它),那么,该对象所占用的内存应该被回收利用,而这些工作就是JVM垃圾收集器的工作
垃圾收集器在对堆内存进行回收之前,第一件事情就是要确定哪些对象还“存活”,哪些已经“死去”,其内存将要被回收,下面就来讲——根搜索算法
在讲根搜索算法之前,因为一个对象在没有任何引用指向它的时候,其所占内存才具备回收添加,那我们先来讲讲什么事引用
传统意义的引用:如果reference类型的数据中存储的数据代表的是另一块内存的起始地址,就称这块内存代表着一个引用
引用的新概念:引用分为强引用、软引用、弱引用、虚引用,这四种引用强度依次逐渐减弱
1、强引用:强引用就是指程序代码中普遍存在的,类似 Object a = new Object() 这类的引用,只要引用还存在,垃圾收集器永远不会回收掉该引用对象所占内存
2、软引用:软引用用来描述一些还有用,但并非必需的对象。对于软引用关联着的对象,在内存不足,将要发生内存溢出异常之前,将会把这些对象列入回收范围之中并进行第二次回收。
3、弱引用:用来描述非必需对象,强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发生之前,当垃圾收集器工作时,无论当前内存时候足够,都将其回收。
4、虚引用:它是最弱的一种引用关系。一个对象是否有虚引用存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得对象实例。它的唯一目的就是希望能在这个对象被收集器回收时收到一个系统通知。
那么我们来说说根搜索算法,判断一个对象是否具备被回收的条件
这个算法的基本思路就是通过一系列的名为”GC Roots“的对象作为起始点,从这些节点开始向下搜索,搜索搜走过的路径为引用链,当一个对象到GC Roots没有任何引用链相连接时,则证明此对象是不可用的,不可达的,应该被回收。如图示:
在Java语言里,可作为GC Roots的对象包括下面几种:
虚拟机栈(栈帧中的本地变量表)中的引用的对象。
方法区中的类静态属性引用的对象。
方法区中的常量引用的对象。
本地方法栈中JNI(即一般说的Native方法)的引用的对象。
- Java虚拟机如何判断对象已死?(哪些内存需要回收)
- java 如何判断对象已死
- 如何判定对象已死可以回收内存
- 如何判断对象已死
- 生存还是死亡 —— Java虚拟机如何判断对象是否需要回收
- Understanding the JVM(六)判断哪些内存需要回收
- java 垃圾回收步步深入02----判断对象是否已死
- 如何判断对象已死(可杀之)
- jvm如何判断对象已死?
- jvm如何判断对象已死?
- jvm如何判断对象已死?
- [深入理解Java虚拟机]第三章 概述:哪些内存需要回收?
- Java虚拟机垃圾回收(一) 基础:回收哪些内存/对象 引用计数算法 可达性分析算法 finalize()方法 HotSpot实现
- Java虚拟机学习(7):对象内存分配与回收
- Java虚拟机学习(7):对象内存分配与回收
- Java虚拟机 - 对象内存分配与回收
- 【003】【Java虚拟机——对象已死判定】
- 六、jvm之如何判断对象已死?
- 如何在Fedora 20 上安装VNC SERVER
- ARM汇编初始化C程序运行环境
- JS报错 Uncaught TypeError: undefined is not a function,解决
- clipse Debug 界面应用详解——Eclipse Debug不为人知的秘密
- YUV Colorspace
- Java虚拟机如何判断对象已死?(哪些内存需要回收)
- 聚类算法——主成分分析(PCA)
- C#中的跳转语句
- spring Quartz调度器分类
- 3种编程方式实现交换变量a.b的值
- 中国经济取得的快速发展让世界羡慕,中国人超强的购买力也让世界对其刮目相看。经济的快速发展带来了人们收入的增加,收入的增加大大促进了人们的购买力。
- 诸葛:移动产品经理需要跟踪app的哪些数据?
- 如果不是埃弗拉在距离比赛结束前10分钟,扳平了比分,上海足球在五一假期里的这轮中超,险些遭遇0分的尴尬
- open阶段的一致性检验