什么是GC Roots
可达性算法中以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相关推荐
- java中的4种引用以和GC Roots
https://juejin.im/post/5d06de9d51882559ee6f4212?utm_source=gold_browser_extension 1.首先,四种引用如下: Final ...
- Java 垃圾回收机 GC Roots详解(Garbage Collection Roots)
背景: 之前面试阿里支付宝,被问到常见的GC Root 是什么? 当时自己支支吾吾,明明自己看过深入理解Java 虚拟机这本书,但是就是回答不上来. 后来自己工作中,遇到内存泄漏问题.我百度,下载了M ...
- 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( MAT 工具使用 | 最大对象 | 类实例个数 | 引用与被引用 | GC Roots 最短链 )
文章目录 一. 内存中最大的对象 二. 查看每个类的对象实例的个数 三. 查看对象的引用与被引用 四. 查看对象到 GC Roots 的最短距离 1. 选择 Merge Shortest Paths ...
- JVM垃圾回收的时候如何确定垃圾?什么是GC Roots?
GCRootDemo.java /** 在java中可作为GC Roots的对象有:* 1.虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象.* 2.方法区中的类静态属性引用的对象.* 3 ...
- 使用MAT做jvm的GC Roots溯源
MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.用于查找内存泄漏以及查看内存消耗情况. MAT是基于Eclipse开发的,是一款免费的性能分析工具. http:/ ...
- 使用JProfiler查看GC Roots
目录 安装 查看gc roots 安装 1.建议装Jprofiler 11 2.idea装插件,直接搜索Jprofiler 3.启动 查看gc roots
- 垃圾回收GC Roots
GC如何判断一个对象为"垃圾"的 1.引用计数算法(已被淘汰的算法) 2.可达性分析算法 通过一系列的称为"GC Roots"的对象作为起始点,从这些节点开始向 ...
- JVM的进阶学习(GC Roots、JVM调优与参数配置、)
1. GC Roots,可达性分析 从GC roots的对象作为起始点,从GC Roots对象开始向下搜索,如果一个对象到GCRoots没有任何引用链相连,则说明对象不可用.即给定一个集合的引用作为根 ...
- 可作为GC Roots的对象
一.名词解释 根搜索算法是JVM用来的判断对象是否存活的算法,此算法基本思路为通过一系列的"GC Roots"对象作为起始点,从这些节点往下搜索,当一个对象和GC Roots不可达 ...
- Java中哪些可以作为GC Roots
1.概念 GC管理的主要区域是Java堆,一般情况下只针对堆进行垃圾回收.方法区.栈和本地方法区不被GC所管理,因而选择这些区域内的对象作为GC roots,被GC roots引用的对象不被GC回收. ...
最新文章
- 人脸识别中的人脸监测、定位校准和对比等技术
- cmd查看python安装路径-从cmd如何查找python的安装路径?
- 前端如何调用后端接口_后端开发:如何写出可靠的接口
- 阿里云峰会|数据库也能自动驾驶?DAS全天候给你保驾护航!
- Ubuntu 16.04卸载火狐浏览器
- 在阿里云服务器Windows Server 2012r IIS 上部署.NET网站
- python 计算每日累计_一颗韭菜的自我修养:用 Python 分析下股市,练练手
- 什么是公有云、私有云、混合云?
- MySQL实验7存储过程_mysql的总结7--存储过程-阿里云开发者社区
- php foreach 不等于_你不知道的接口测试之简单的开始
- MyBatis学习--高级映射
- 微软软件基地落户广州
- xp 计算机桌面图标不见,萝卜XP系统桌面图标全部消失了如何解决
- 电子通信协议之CAN总线协议篇
- 独立t检验和配对t检验_配对学生的t检验是什么?
- 基于javaweb+SSM的校园外卖点餐系统(java+SSM+JSP+maven+mysql)
- 【战国策】之《齐策·昭阳为楚伐魏》
- C++从入门到放弃之:静态成员与单例模式的实现
- 美团Java开发实习生面经
- 2021年西式面点师(中级)试题及答案及西式面点师(中级)考试试题
热门文章
- 安装Sql Server 2005 失败一例
- 2008年信息安全服务市场发展报告
- java servlet 学习_java学习之web基础(1):Servlet
- LeetCode 118. Pascal’s Triangle
- 未定义标识符 stringc/c++(20)_拓展巩固练习(2020.5.20)
- python的json模块
- so文件动态加载注意事项
- angular2之pdf文件操作大全
- Dapper:The member of type SeoTKD cannot be used as a parameter Value
- LNMP - nginx代理详解