如何确定一个堆中的对象是否死去?

两个思路:

  1、引用计数法

    给每个对象添加一个引用,用来统计指向该对象的引用计数。有引用时就加1,引用失效时就减1。任何时候引用计数为0,该对象就死亡了。可以被当做垃圾处理。但引用计数法有个难以解决的问题:循环引用。

  2、可达性分析算法

    通过一系列的被称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链时,则证明此对象不可用,会被判定为可回收的对象。

    可达性分析算法可以解决引用计数法中的循环引用问题。

什么是GC Roots?

  GC Roots是一些由堆外指向堆内的引用。

  作为GC Roots的对象包括以下几种:

  1、虚拟机栈(帧栈中的本地变量表)中引用的对象。

  2、方法区中类静态属性引用的对象。

  3、方法区中常量引用的对象。

  4、本地方法栈中JNI(Native方法)引用的对象。

JVM GC Roots的更多相关文章

  1. JVM总括二-垃圾回收:GC Roots、回收算法、回收器

    JVM总括二-垃圾回收:GC Roots.回收算法.回收器 目录:JVM总括:目录 一.判断对象是否存活 为了判断对象是否存活引入GC Roots,如果一个对象与GC Roots没有直接或间接的引用关 ...

  2. JVM 垃圾回收GC Roots Tracing

    1.跟搜索算法: JVM中对内存进行回收时,需要判断对象是否仍在使用中,可以通过GC Roots Tracing辨别. 定义: 通过一系列名为”GCRoots”的对象作为起始点,从这个节点向下搜索,搜 ...

  3. JVM:GC Roots

    JVM:GC Roots 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 JVM 垃圾回收的时候如何确定垃圾 什么是垃圾 简单来说就是内存中已经不再被使用的空间就 ...

  4. 【JVM底层策略 一】GC roots如何判断对象不可达

    查找内存中不再使用的对象 引用计数法 引用计数法就是如果一个对象没有被任何引用指向,则可视之为垃圾.这种方法的缺点就是不能检测到环的存在. 2.根搜索算法 根搜索算法的基本思路就是通过一系列名为”GC ...

  5. 枚举GC Roots的实现

    枚举根节点 从可达性分析中从GC Roots节点找引用链这个操作为例,可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,现在很多应用仅仅方 ...

  6. GC roots 总结

      previous      content      next   GC roots The so-called GC (Garbage Collector) roots are objects ...

  7. JVM GC之一找出不可达对象并回收

    JAVA运行时数据区域 1.程序计数器:当前线程所执行的字节码的行号指示器.一个处理器只会执行一条线程中的指令,为了线程切换后能回复到正确的执行位置,所以每条线程都需要一个独立的计数器.各条线程之间互 ...

  8. JVM GC杂谈之理论入门

    GC杂谈之理论入门 JVM堆布局介绍 ​ JVM堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ( Young ) 又被划分为三个区域:Eden.From Sur ...

  9. JVM GC算法

    在判断哪些内存需要回收和什么时候回收用到GC 算法,本文主要对GC 算法进行讲解. JVM垃圾判定算法 常见的JVM垃圾判定算法包括:引用技术算法.可达性分析算法. 引用技术算法(Reference ...

随机推荐

  1. $_SERVER 中HTTP_HOST 和 SERVER_NAME

    本来打算获取当前页面的url的   拼接时发现 $_SERVER['SERVER_NAME'] 并不是当前的url链接 打印整个$_SERVER  发现 [SERVER_NAME] => lvs ...

  2. DAY 7 上午

    一些图论的题目 BZOJ 3445 Roadblock 求出最短路,枚举每条边再跑一遍即可(科技为了我 代码: #include<bits/stdc++.h> using namespac ...

  3. 九、设置RF自定义的日志输出路径

    在Arguments输入-d E:\\robot,每次运行完都会发送该目录日志

  4. Java中class的声明

    在Java中下面Class的声明哪些是错误的?(A,B,C)   A:public abstract final class Test { abstract void method();} B:pub ...

  5. Win7下使用TortoiseGit设置保存密码

    1. 打开 TortoiseGit 设置,编辑 .gitconfig 文件,如图: 2. 添加下面两行配置,如图: [credential] helper = store 3. 保存退出即可

  6. 使用js如何获取treeview控件的当前选中的节点

    var selectedNodeID = theForm.elements["<%=treeView1.ClientID%>_SelectedNode"].value; ...

  7. spring +spring+ hibernate配置1

    这种配置方式是将Spring .SpringMVC.Hibernate三个模块分开配置,交叉引用!hibernate连接配置使用.properties文件 web.xml配置 <web-app ...

  8. Linux_系统进程管理

    目录 目录 进程管理 进程管理的指令 查看进程ps指令 pgreppidof指令查pid lsof查看系统中的进程 nice指令修改进程的nice值 kill指令结束进程 top系统进程管理器任务管理 ...

  9. JavaSE部分1.Java基础

    1.为什么重写equals()还要重写hashcode()?  (equals()和hashCode()是java Object中两个基本方法) 首先equals与hashcode间的关系是这样的: ...

  10. Discrete Mathematics and Its Applications | 1 CHAPTER The Foundations: Logic and Proofs | 1.2 Applications of Propositional Logic

    Translating English Sentences System Specifications Boolean Searches Logic Puzzles Logic Circuits