亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

一個關于JAVA GC的小實驗

標簽:
Java

关于JAVA的GC,我只是略微了解,我知道如果一个对象没有其他东西引用它,它就会在适当的时机被回收掉。

但,如果一个A对象持有B对象的引用,后对A对象的引用被置为null,那么B对象还会被回收吗?如果B被回收,那么顺序是怎么样的?是A先,还是B先?

就让我们来实践一下:

创建两个类:

public class MyObject {

   private MyObject1 myObject1 = new MyObject1();

   @Override
   protected void finalize() throws Throwable {
       System.err.println("my object  gc");
   }
}
public class MyObject1 {

   @Override
   protected void finalize() throws Throwable {
       System.err.println("my object 1 gc");
   }
}

需要说明的是:finalize不一定会在对象被回收前被调用。

Main类:

public class Main {

   public static void main(String[] args) {
       MyObject myObject =new MyObject();
       myObject = null;

       System.gc();

       try {
           Thread.sleep(5000);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }

   }
}

需要说明的是:System.gc()只是建议虚拟机进行垃圾回收,但具体是由虚拟机自己去决定的,这里我使用的是Java HotSpot(TM) 64-Bit Server VM 18.9。

不同的虚拟机实现不同,可能会有不一样的结果。

好的,让我们来执行一下:

my object 1 gc
my object  gc

Process finished with exit code 0

首先是object1被回收,然后object才被回收。


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消