GC Roots是JVM中的一组必须活跃的引用,用于判断对象是否可以被回收,在Java语言中,GC Root主要包括以下几类元素:
1、虚拟机栈中引用的对象,各个线程被调用的方法中使用到的参数、局部变量等。
2、本地方法栈内JNI(通常说的本地方法)引用的对象。
3、方法区中类静态属性引用的对象,Java类的引用类型静态变量。
4、方法区中常量引用的对象,字符串常量池(string Table)里的引用。
5、所有被同步锁synchronized持有的对象。
6、Java虚拟机内部的引用,基本数据类型对应的Class对象,一些常驻的异常对象(如: NullPointerException、OutOfMemoryError),系统类加载器。
7、反映java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等 。