JVM可达性分析算法

一、可达性分析算法

  “GC Roots”根对象集作为起始点集合,从这些节点开始,根据引用关系向下搜索,搜索过程路径称为“引用链”。如果,某对象到GC Root没有引用链相关联,那么,就是GC Root到对象不可达,则证明这个对象不可能再被使用。

 

   上图所示,Object 1与GC Root可达,而Object 5与GC Root不可达。

二、GC Roots有哪些

  在Java技术体系里面,固定作为GC Root的对象:

    • 虚拟机栈中引用的对象,如:线程中被调用的方法堆栈中使用的参数、局部变量、临时变量。
    • 方法区中类静态属性引用的对象。
    • 方法区中常量引用的对象,比如:字符串常量池里的引用。
    • 本地方法栈中JNI引用的对象。
    • Java虚拟机内部的引用,比如:基本数据类型对应的Class对象、常驻异常对象、系统类加载器,如:String、NullPointExcepition等。
    • 所有被同步锁持有的对象(synchronized关键字)。
    • 反映Java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等。

 

posted @ 2021-10-18 17:16  naray  阅读(654)  评论(0编辑  收藏  举报