日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java 虚拟机原理】垃圾回收算法 ( 可达性分析算法 | GC Root 示例 | GC 回收前的两次标记 | finalize 方法示例 )

發布時間:2025/6/17 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java 虚拟机原理】垃圾回收算法 ( 可达性分析算法 | GC Root 示例 | GC 回收前的两次标记 | finalize 方法示例 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、可達性分析算法
  • 二、GC Root 示例
  • 三、GC 回收前的兩次標記
  • 四、finalize 方法示例





一、可達性分析算法



堆內存 中 , 存在一個 根對象 GC Root , GC Root 對象一般是如下幾種情況 :

  • 線程棧 中的 棧幀 中的 局部變量表 中的 引用對象 ;
  • 方法區 中的 靜態引用對象 ;
  • 方法區 中的 常量引用對象 ;
  • 本地方法棧 中的 JNI 中的 引用的對象 ;

根對象 GC Root 指向了 對象 1 ; 對象 1 又指向了 對象 2 , 對象 3 ; 對象 3 指向了 對象 4 ;

只要是 處于整個鏈條上的對象 , 都是 非垃圾對象 , 不能進行回收的對象 ;

不處于 引用鏈條 上的對象 , 就是 垃圾對象 ;


下圖中 , 紫色的是存活對象 , 白色的是可回收的 垃圾對象 ;





二、GC Root 示例



找出下面程序中的 GC Root 對象 ;

public class HelloWorld {public static HelloWorld mHelloWorld = new HelloWorld();public int add() {int a = 1;int b = 1;int c = a + b;return c;}public static void main(String[] args) {HelloWorld helloWorld = new HelloWorld();helloWorld.add();} }

131313 行的 helloWorld 對象是 GC Root 對象 , 符合 " 線程棧 中的 棧幀 中的 局部變量表 中的 引用對象 " 條件 ;

helloWorld 對象中有其它引用對象 , 只要引用鏈條沒有斷 , 那么鏈條上的對象都是 非垃圾對象 ;

一旦執行了 helloWorld = null; 語句 , 那么該對象及以下的對象就沒有了引用鏈條 , 這個對象及之下的對象就都變成了 垃圾對象 ;





三、GC 回收前的兩次標記



當對象被 定義為垃圾對象后 , 并不會馬上被回收 , 只是判了個死緩 , 沒有真正執行垃圾回收 ;

當 GC Root 引用鏈斷開后 , 對象不可達 ;

JVM 會對這些 不可達對象 進行一次標記 , 然后執行一次篩選 , 執行該對象的 finalize 方法 ,

public class HelloWorld {@Overrideprotected void finalize() throws Throwable {super.finalize();} }

finalize 方法是對象被 GC 垃圾回收之前 , 被調用的方法 , 該方法不能保證一定能執行完畢 , JVM 會給對象一個時間限制 , 在這個時間內執行 finalize 方法 , 重寫的該方法中不要執行很耗時的操作 ;

在對象的 finalize 方法中 , 如果不想被回收 , 可以再次添加一個引用鏈 , 讓 GC Root 對象引用自己 ;


之后 JVM 會對不可達對象 進行第二次標記 , 此時如果發現 該對象 仍然是垃圾對象 , 此時直接將該對象回收 ;

finalize 方法只會被調用一次 , JVM 對 對象第二次標記時 , 發現對象如果沒有被引用 , 直接回收 , 不再調用 finalize 方法 ;





四、finalize 方法示例



創建一個對象 , 賦值給變量 A , 然后將 A 置空 , 該對象就變成了垃圾對象 ;

在 finalize 方法中 , 對象嘗試自救 , 將自己賦值給 A , 這樣該對象又變成了 非垃圾對象 ;

調用 System.gc() 方法后 , 一般需要暫停幾秒 , 等待 finalize 方法調用 ;


這里將 A 兩次置空 , 第一次調用了 finalize 方法 , 自救成功 , 沒有被回收 ;

第二次置空后 , finalize 方法不再調用 , 被回收了 ;


代碼示例 :

public class HelloWorld {public static HelloWorld A;@Overrideprotected void finalize() throws Throwable {super.finalize();System.out.println("finalize 被調用");A = this;}public static void main(String[] args) throws InterruptedException {A = new HelloWorld();// 將 對象 變為垃圾對象A = null;// 進行垃圾回收System.gc();// 由于 gc 的優先級比較低// 等待 1000ms 看 finalize 是否被調用Thread.sleep(1000);// 本次 GC 調用之前// 先調用了 finalize 方法// 為對象添加了 GC Root 引用鏈// 該方法只會調用一次if (A == null) {System.out.println("對象被回收");} else {System.out.println("對象未被回收");}// 將 對象 變為垃圾對象A = null;// 進行垃圾回收System.gc();// 由于 gc 的優先級比較低// 等待 1000ms 看 finalize 是否被調用Thread.sleep(1000);// 本次調用 GC// 直接判斷對象是否有引用鏈// 不再調用 finalize 方法// 發現沒有引用鏈 , 直接回收if (A == null) {System.out.println("對象被回收");} else {System.out.println("對象未被回收");}} }

執行結果 :

finalize 被調用 對象未被回收 對象被回收

總結

以上是生活随笔為你收集整理的【Java 虚拟机原理】垃圾回收算法 ( 可达性分析算法 | GC Root 示例 | GC 回收前的两次标记 | finalize 方法示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本欧美不卡 | 午夜小福利| 三浦惠理子aⅴ一二三区 | av在线免费观看一区 | 久久精品性爱视频 | 久久久久午夜 | 日韩中文在线播放 | 亚洲av不卡一区二区 | 在线国产网站 | 伊人加勒比 | 五月天激情开心网 | 一集毛片 | 亚洲精品久久久久 | 久久免费激情视频 | 中文字幕一区二区三区在线观看 | 夜色综合网 | 国产婷婷色一区二区在线观看 | 91丝袜在线观看 | 色吧av| 99久久久无码国产精品衣服 | 久久亚洲中文字幕无码 | 国产精品白嫩极品美女视频 | 久久久香蕉 | 欧美aaa级片| 午夜精品国产精品大乳美女 | 婷婷五月在线视频 | 国产曰肥老太婆无遮挡 | 少妇人妻在线视频 | 亚洲免费网 | 97自拍偷拍 | 日本三级视频在线播放 | 一级做a爰片久久毛片潮喷 天天透天天干 | 精品视频在线看 | 国产又爽又黄免费视频 | 久久久久在线观看 | 四虎成人精品在永久免费 | 在线看一区二区 | 日本美女全裸 | 九九九在线观看 | 无码国产色欲xxxxx视频 | 男男全肉变态重口高h | 超级变态重口av番号 | 1769国产精品视频 | 麻豆av一区二区三区 | 国产精品300页 | 麻豆成人久久精品一区二区三区 | 一级少妇片 | 韩日av | 国产最爽的乱淫视频国语对白 | 日本不卡免费在线 | 日本精品久久久久中文字幕 | 可以免费看黄的网站 | 国产综合福利 | 无码人妻精品一区二区三区在线 | 91麻豆映画传媒 | 蜜臀少妇久久久久久久高潮 | 亚洲日本天堂 | 涩涩网站在线 | 91麻豆精品一二三区在线 | 伊人黄色网 | 九九视频在线播放 | 日本泡妞xxxx免费视频软件 | 欧美日韩综合 | 久久中文免费视频 | 国产成人aⅴ| 男人操女人免费视频 | 丝袜操 | 中国女人做爰视频 | 国产午夜视频在线观看 | 老头老太做爰xxx视频 | 亚洲成a人片777777久久 | 动漫美女无遮挡免费 | 午夜一本 | 亚洲精品视频在线播放 | 日韩在线视频中文字幕 | 性盈盈影院中文字幕 | 亚洲欧美国产精品专区久久 | 激情xxxx | 中文字幕免费高 | 精品免费国产一区二区三区 | 色婷婷av一区| 黄色一级片免费看 | 欧美国产第一页 | 精品人妻av一区二区三区 | 手机看片福利在线 | 亚洲AV蜜桃永久无码精品性色 | 中文字幕在线导航 | 国产视频精品一区二区三区 | 欧美三级午夜理伦三级中视频 | 欧美成在线观看 | 欧美日本在线观看 | 中国女人毛片 | 欧亚av | 久久亚洲aⅴ无码精品 | 欧美午夜小视频 | 欧美成人片在线 | 中文字幕一区二区三区久久久 | 国产精品12| 国产50页|