GC Root

                    GC Root

       GC Root:常说的GC(Garbage Collector) roots,特指的是垃圾收集器(Garbage Collector)的对象,GC会收集那些不是GC roots且没有被GC roots引用的对象。

    GC Root 引用的对象:

        1.虚拟机栈中引用的对象

        2.方法区中类静态属性引用的对象

        3.方法区常量引用的对象

        4.本地方法栈中JNI引用的对象(Native方法)

    简单的用衣服图来表达一下:

        

   留心脚下:

     判断一个对象的存活不是有计数器判断,因为计数器无法解对象之间的相互循环引用问题,一个对象的存活可以使用可达性分析算法来判断。

  可达性分析算法:

    

    

    一次对象自我拯救的演示:

 1 package com.hehe;
 2 
 3 public class Main {
 4 
 5 
 6     public static Main save = null;
 7 
 8     public void isAlive() {
 9         System.out.println("yes,i am still alive:)");
10     }
11 
12     @Override
13     protected void finalize() throws Throwable {
14         super.finalize();
15         System.out.println("finalize method executed");
16         Main.save = this;
17     }
18 
19     public static void main(String[] args) throws Throwable {
20         save = new Main();
21 
22         //对象的第一次拯救
23         save=null;
24         System.gc();
25         //finalize方法优先级很低,所以暂时等待0.5秒
26         Thread.sleep(500);
27         if (save != null) {
28             save.isAlive();
29         } else {
30             System.out.println("no , i am dead;(");
31         }
32 
33         //第二次拯救:失败,因为任何一个对象的finalize方法都只会被系统调用一次
34         save = null;
35         System.gc();
36         if (save != null) {
37             save.isAlive();
38         } else {
39             System.out.println("no,i am dead :))");
40         }
41     }
42 }

运行结果:

     

 

转载于:https://www.cnblogs.com/meiLinYa/p/9103248.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值