1、通过枚举根节点做可达性分析,根节点是GC Roots
2、GC Roots的对象有以下四种
2.1、虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中的引用的对象
2.2、方法区中的类静态属性引用的对象
2.3、方法区中常量引用的对象
2.4、本地方法中的JNI(Native方法)引用的对象
以上四种的直接上代码
/**
* 情况4是线程的start方法
*/
public class GCRootsDemo {
private byte[]bytes = new byte[1024];
//情况2:方法区中的类静态属性引用的对象
private static SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//情况3:方法去中常量引用的对象
private static final SimpleDateFormat sdf2 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void method(){
//情况1:这里的t1是方法区栈帧中引用的对象, t1指向new GCRootsDemo()
GCRootsDemo t1 = new GCRootsDemo();
System.gc();
}
public static void main(String[] args) {
method();
}
}