JVM GC Roots有哪些?:
GC Root 指的是(Garbage Collector)垃圾收集器要收集的目标对象
1.栈中的对象引用(reference)
局
部
变
量
或
参
数
\color{red}{局部变量或参数}
局部变量或参数
2.
活
着
的
线
程
\color{red}{2.活着的线程}
2.活着的线程
3.
J
N
I
(
j
a
v
a
N
a
t
i
v
e
I
n
e
r
t
f
a
c
e
)
的
局
部
变
量
和
参
数
\color{red}{3.JNI(javaNativeInertface)}的局部变量和参数
3.JNI(javaNativeInertface)的局部变量和参数
4.
全
局
J
N
I
的
引
用
\color{red}{4.全局JNI的引用}
4.全局JNI的引用
5.
M
o
n
i
t
o
r
U
s
e
d
−
用
于
同
步
的
监
控
对
象
\color{red}{5. Monitor Used - 用于同步的监控对象}
5.MonitorUsed−用于同步的监控对象
6*.Class - 由系统类加载器(system class loader)加载的对象,这些类是不能够被回收的,他们可以以静态字段的方式保存持有其它对象。我们需要注意的一点就是,通过用户自定义的类加载器加载的类,除非相应的java.lang.Class实例以其它的某种(或多种)方式成为roots,否则它们并不是roots,
7*.Held by JVM - 用于JVM特殊目的由GC保留的对象,但实际上这个与JVM的实现是有关的。可能已知的一些类型是:系统类加载器、一些JVM知道的重要的异常类、一些用于处理异常的预分配对象以及一些自定义的类加载器等。然而,JVM并没有为这些对象提供其它的信息,因此就只有留给分析分员去确定哪些是属于"JVM持有"的了。