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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

system.gc会立即执行垃圾回收吗_JVM基础到实战03-垃圾回收概念

發布時間:2023/12/18 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 system.gc会立即执行垃圾回收吗_JVM基础到实战03-垃圾回收概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.為什么要進行垃圾回收?

不回收會造成內存泄漏

2.什么時候執行回收?

達到一定的比例,或者申請的內存超出了空閑內存,觸發回收

3.如果是你,如何設計垃圾回收算法?就是回收哪些類型的對象

回收棧中沒有指針指向對象,斷開連接的對象

4.如何判定對象存活呢?

--引用計數法:

堆中的每個對象實例都有一個引用計數器,每當一個對象被創建時,且將該對象分配給一個變量,該變量數設置為1,當任何變量被賦值為這個對象的引用時,計數+1(此處也可以看出,對象的賦值是引用的傳遞),但當一個對象實例的引用超過了生命周期(比如程序執行完,出棧),或者被設為一個新值時,該實例的引用計數-1,引用為0時,成為等待回收狀態,并不會立即被回收,而是觸發回收條件后執行回收。

優點:引用計數通過引用加減1,為0時,等待回收,簡單!

缺點:無法檢測循環引用,A對象的屬性引用B對象,B對象的屬性引用了A對象,他們的引用計數器永遠不可能為0

?

引用計數算法示意圖

構造一個循環引用場景,測試使用何種對象存活分析算法(如果被GC,說明使用的非引用計數算法):

配置啟動參數,-verbose:gc -XX:+PrintGCDetails

運行程序,查看GC結果

?

運行結果

占用和回收的內存都變大

?

運行結果

說明:循環引用的場景,依然發生了GC,而我們使用的是JDK1.8

說明1.8版本已經不再使用引用計數器方式

可達性分析

概念:又稱為根搜索算法

根搜索算法是從離散數學中的圖論引入的,從根節點(GCROOT)開始搜索,尋找引用的節點,找到引用節點后,繼續尋找這個引用節點的引用節點,當所有的引用節點尋找完成后,剩余的節點則被認為是沒有被引用的節點,即是無用的節點。

Java中可以作為GCROOT的對象有:

虛擬機棧中引用的對象,本地變量表

本地方法棧中引用的對象

方法區中靜態屬性引用的對象

方法區中常量引用的對象

??

??

??

總結

以上是生活随笔為你收集整理的system.gc会立即执行垃圾回收吗_JVM基础到实战03-垃圾回收概念的全部內容,希望文章能夠幫你解決所遇到的問題。

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