可达性算法中以GC Root对象为起点开始搜索。

什么是GC Root对象

虚拟机栈中引用的对象

public class Rumenz{public static  void main(String[] args) {Rumenz a = new Rumenz();a = null;}}

a是栈帧中的本地变量,a就是GC Root,由于a=null,a与new Rumenz()对象断开了链接,所以对象会被回收。

方法区类的静态成员引用的对象

public class Rumenz{public static Rumenz=r;public static void main(String[] args){Rumenz a=new Rumenz();a.r=new Rumenz();a=null;}
}

栈帧中的本地变量a=null,由于a断开了与GC Root对象(a对象)的联系,所以a对象会被回收。由于给Rumenz的成员变量r赋值了变量的引用,并且r成员变量是静态的,所以r就是一个GC Root对象,所以r指向的对象不会被回收。

方法区常量引用的对象

public class Rumenz{public static final Rumenz r=new Rumenz();public static void main(String[] args){Rumenz a=new Rumenz();a=null;}}

常量r引用的对象不会因为a引用的对象的回收而被回收。

本地方法栈中JNI引用的对象

JNIEXPORT void JNICALL Java_com_pecuyu_jnirefdemo_MainActivity_newStringNative(JNIEnv *env, jobject instance,jstring jmsg) {
...// 缓存String的classjclass jc = (*env)->FindClass(env, STRING_PATH);
}

本地方法就是一个 java 调用非 java 代码的接口,该方法并非 Java 实现的,可能由 C 或 Python等其他语言实现的, Java 通过 JNI 来调用本地方法, 而本地方法是以库文件的形式存放的(在 WINDOWS 平台上是 DLL 文件形式,在 UNIX 机器上是 SO 文件形式)。通过调用本地的库文件的内部方法,使 JAVA 可以实现和本地机器的紧密联系,调用系统级的各接口方法,

当调用 Java 方法时,虚拟机会创建一个栈桢并压入 Java 栈,而当它调用的是本地方法时,虚拟机会保持 Java 栈不变,不会在 Java 栈祯中压入新的祯,虚拟机只是简单地动态连接并直接调用指定的本地方法。

什么是GC Roots相关推荐

  1. java中的4种引用以和GC Roots

    https://juejin.im/post/5d06de9d51882559ee6f4212?utm_source=gold_browser_extension 1.首先,四种引用如下: Final ...

  2. Java 垃圾回收机 GC Roots详解(Garbage Collection Roots)

    背景: 之前面试阿里支付宝,被问到常见的GC Root 是什么? 当时自己支支吾吾,明明自己看过深入理解Java 虚拟机这本书,但是就是回答不上来. 后来自己工作中,遇到内存泄漏问题.我百度,下载了M ...

  3. 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( MAT 工具使用 | 最大对象 | 类实例个数 | 引用与被引用 | GC Roots 最短链 )

    文章目录 一. 内存中最大的对象 二. 查看每个类的对象实例的个数 三. 查看对象的引用与被引用 四. 查看对象到 GC Roots 的最短距离 1. 选择 Merge Shortest Paths ...

  4. JVM垃圾回收的时候如何确定垃圾?什么是GC Roots?

    GCRootDemo.java /** 在java中可作为GC Roots的对象有:* 1.虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象.* 2.方法区中的类静态属性引用的对象.* 3 ...

  5. 使用MAT做jvm的GC Roots溯源

    MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.用于查找内存泄漏以及查看内存消耗情况. MAT是基于Eclipse开发的,是一款免费的性能分析工具. http:/ ...

  6. 使用JProfiler查看GC Roots

    目录 安装 ​ 查看gc roots 安装 1.建议装Jprofiler 11 2.idea装插件,直接搜索Jprofiler 3.启动  查看gc roots

  7. 垃圾回收GC Roots

    GC如何判断一个对象为"垃圾"的 1.引用计数算法(已被淘汰的算法) 2.可达性分析算法 通过一系列的称为"GC Roots"的对象作为起始点,从这些节点开始向 ...

  8. JVM的进阶学习(GC Roots、JVM调优与参数配置、)

    1. GC Roots,可达性分析 从GC roots的对象作为起始点,从GC Roots对象开始向下搜索,如果一个对象到GCRoots没有任何引用链相连,则说明对象不可用.即给定一个集合的引用作为根 ...

  9. 可作为GC Roots的对象

    一.名词解释 根搜索算法是JVM用来的判断对象是否存活的算法,此算法基本思路为通过一系列的"GC Roots"对象作为起始点,从这些节点往下搜索,当一个对象和GC Roots不可达 ...

  10. Java中哪些可以作为GC Roots

    1.概念 GC管理的主要区域是Java堆,一般情况下只针对堆进行垃圾回收.方法区.栈和本地方法区不被GC所管理,因而选择这些区域内的对象作为GC roots,被GC roots引用的对象不被GC回收. ...

最新文章

  1. 人脸识别中的人脸监测、定位校准和对比等技术
  2. cmd查看python安装路径-从cmd如何查找python的安装路径?
  3. 前端如何调用后端接口_后端开发:如何写出可靠的接口
  4. 阿里云峰会|数据库也能自动驾驶?DAS全天候给你保驾护航!
  5. Ubuntu 16.04卸载火狐浏览器
  6. 在阿里云服务器Windows Server 2012r IIS 上部署.NET网站
  7. python 计算每日累计_一颗韭菜的自我修养:用 Python 分析下股市,练练手
  8. 什么是公有云、私有云、混合云?
  9. MySQL实验7存储过程_mysql的总结7--存储过程-阿里云开发者社区
  10. php foreach 不等于_你不知道的接口测试之简单的开始
  11. MyBatis学习--高级映射
  12. 微软软件基地落户广州
  13. xp 计算机桌面图标不见,萝卜XP系统桌面图标全部消失了如何解决
  14. 电子通信协议之CAN总线协议篇
  15. 独立t检验和配对t检验_配对学生的t检验是什么?
  16. 基于javaweb+SSM的校园外卖点餐系统(java+SSM+JSP+maven+mysql)
  17. 【战国策】之《齐策·昭阳为楚伐魏》
  18. C++从入门到放弃之:静态成员与单例模式的实现
  19. 美团Java开发实习生面经
  20. 2021年西式面点师(中级)试题及答案及西式面点师(中级)考试试题

热门文章

  1. 安装Sql Server 2005 失败一例
  2. 2008年信息安全服务市场发展报告
  3. java servlet 学习_java学习之web基础(1):Servlet
  4. LeetCode 118. Pascal’s Triangle
  5. 未定义标识符 stringc/c++(20)_拓展巩固练习(2020.5.20)
  6. python的json模块
  7. so文件动态加载注意事项
  8. angular2之pdf文件操作大全
  9. Dapper:The member of type SeoTKD cannot be used as a parameter Value
  10. LNMP - nginx代理详解