在之前的博客中, 我们提到过引用树的可达性分析
, 用来判断是否可以进行GC, 出发点是 GC roots, 那么 GC Roots 有哪些呢 ?
GC Roots
- 栈中引用的本地变量
- Class, 系统类加载器加载的, 这些不会被卸载. 但自定义类加载器加载的不是roots.
- 方法区中类静态属性引用的对象
- 方法区中常常量引用的对象
- JNI 引用的本地变量
- JNI 全局引用
- 线程, 活着的线程
- 被用于 synchronization 监视的对象
- 被 jvm 持有引用的
- main 方法中的本地变量
- main 线程
- main class 的静态变量
参考
https://www.dynatrace.com/resources/ebooks/javabook/how-garbage-collection-works/
https://www.yourkit.com/docs/80/help/gc_roots.jsp