GC根对象类型

更新时间: 2023-08-28 16:28:35

关于「GC根对象」请参见概念解释:

垃圾回收器从这些区域开始扫描存活对象。比如下图中,垃圾回收器从线程栈这片区域出发,扫描到对象A和B,然后以这两个对象为起点,扫描其他对象。

不同的区域存放了不同的GC根对象,在分析过程中可能遇到的所有区域如下:

image

  • Unknown: 未知类型

  • System Class: 这是一个java.lang.Class对象

  • Jni Local: 这是一个JNI局部引用

  • Jni Global: 这是一个JNI全局引用

  • Thread Block: 这个对象被当前活跃的对象块引用

  • Busy Monitor: 这是一个调用了wait或者notify对象,或者它作为同步对象被用于synchronized块

  • Java Local: 这是一个Java局部变量,只存在于当前栈帧中

  • Native Stack: 这是native方法的入参

  • Thread: 这是一个java.lang.Thread对象

  • Finalizable: 这是一个等待执行finalize方法的对象

  • Unfinalized: 这个对象虽然有finalize方法,但是该finalize从未被调用过,也没有在finalize队列中等待被调用

  • Unreachable: 这是一个垃圾对象,即垃圾回收器无法触及到的对象,在下一次GC中将会被回收

  • Stackframe: 包含局部变量的Java栈帧

  • Nmethod: 这是一个JIT编译的方法