当前位置:   article > 正文

JVM垃圾回收的时候如何确定垃圾?什么是GC Roots?_jvm判断是否是垃圾的,root存在哪里

jvm判断是否是垃圾的,root存在哪里

什么是垃圾: 简单的说, 内存中已经不再被使用的空间,就是垃圾.
例如一个对象指向为null了 Person p1 = null , 那么就可以将p1对象进行回收.

要进行垃圾回收, 怎么判断一个对象是否可以被回收?

  1. 引用计数法 (了解)
  2. GCRoot (枚举根节点可达性分析(根搜索路径))
    把GC Root对象开始作为起点, 来进行链路的扫描和访问, 如果能够可达就认为是活跃的,就不能回收,如果不能访问到, 那就不可达, 链条的起点必须是GCRoot对象,
    如下图左图为引用可达对象, 因为是从GCRoots开始的. 而有图为GC不可达, 因为不是从GCRoot开始的, 即使它内部的object5关联着object6和7.

    可以成为GCRoot的对象

1.虚拟机栈(栈帧中的局部变量区,也叫局部变量表)中引用的对象
2.方法区中静态类属性引用的对象(使用static修饰的对象)
3.方法区常量引用的对象.(使用final修饰的对象)
4.本地方法栈中JNI(Native方法)引用的对象. (使用Native修饰的方法, 线程中用的多.)

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号