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

歡迎訪問 生活随笔!

生活随笔

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

java

java判断对象已死_Java的JVM判断对象已死的基本算法分析

發布時間:2023/12/1 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java判断对象已死_Java的JVM判断对象已死的基本算法分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jvm中有各種的垃圾收集器,每個收集器都有各自的算法。但是一切的根本都需要找到找到應該被消除的對象,理解如何找到死亡對象才是理解垃圾收集器的基礎。

01兩個基本算法

a、引用記數法:對象中加一個引用計數器,每次被引用計數器加一,引用失效減一,當減到0的時候就不會在被再引用了,就可以回收了。

優點:原理簡單,效率高。

缺點:有很多例外情況要用大量額外的處理,比如兩個對象相互引用。

b、可達性分析:通過一系列“GC Roots”的根對象為起始,根據引用關系向下搜索,搜索路徑形成引用鏈,而那些沒有在任何引用鏈上的叫做不可達對象,都是不可能被再次使用的。如下圖,紅色部分就是需要回收的。

兩種算法對比如下:

02GC Roots包含哪些

可達性分析首先要確認的是GC Roots,只有選擇合適的GC Roots才能真正的找到應該存在的對象和排除不應該存在的對象。GC Roots主要包含以下:

a、虛擬機棧中的對象,就是各個線程的方法里面的方法參數、局部變量、臨時變量。

b、方法區中類的靜態屬性引用的對象。

c、方法區中常量引用的對象,比如字符串常量池的引用。

d、本地方法棧引用的對。

e、虛擬機內部的引用,基本類型對應的class對象,常駐異常對象,系統類加載器。

f、所有被同步鎖(synchronized)持有的對象。

g、Java虛擬機內部情況的JMXBean、JVMTI中注冊的回調、本地代碼緩存。

可以把上面的大概分成幾個方面,如下圖:

GC Roots實際上就是當前JVM必須要的對象,可以分成三類。

第一類是JVM線程里面直接引用的對象,相當于正在執行的方法里面的對象,這些肯定是必須存活的。

第二類是設置的一些靜態常量,比如我們在類里面用static final修飾的一些對象,這類對象至jvm啟動到結束都會一直存在。

第三類就是JVM本身所需要的對象,這類對象肯定不能被回收。

03Java的引用

可達性分析就是根據引用來判斷的,那么Java中有哪些引用呢?一共分4類引用:

a、強引用:常見的引用賦值,垃圾收集器不回收。ObjectA a=new ObjectA();

b、軟引用:還有用,但非必須。在系統將要發生內存溢出前,把他們列為回收范圍進行二次回收,JDK1.2后SoftReference類實現。

c、弱引用:非必須,比軟引用更弱。下次垃圾收集器無論內存是否足夠,均回收。JDK1.2后WeakReference類實現。

d、虛引用:最弱引用關系,虛引用不影響對象的生存,也無法通過虛引用來取得對象實例。唯一作用是可以在垃圾收集器回收前收到一個系統通知。JDK1.2后PhantomReference類實現。

對比如下圖:

后面三個引用我們平時使用幾乎沒有,多在一些源碼中出現,依靠3個類實現:SoftReference、WeakReference、PhantomReference。在看到這三個類的時候能知道對應的含義。

04兩次標記

當一個對象被標記為不可達對象的時候并不一定是馬上被回收的。如果對象重寫了finalize()方法,并且finalize()方法還沒有被執行過(finalize()方法只會被執行一次),那么這個對象會被放入F-Queue隊列里面。會有一個Finalizer線程去執行隊列里面對象的finalize()。如果finalize()方法把這個對象重新賦值給了其他變量,就叫做逃脫成功。

垃圾收集器會對F-Queue隊列里的對象進行第二次標記,如果在上一步中成功逃脫的就會移除即將回收的集合。

對于逃脫的對象,在下次被標記成不可達對象時,就會被直接回收,因為finalize()方法已經執行過一次了。

Java程序員日常學習筆記,如理解有誤歡迎各位交流討論!

總結

以上是生活随笔為你收集整理的java判断对象已死_Java的JVM判断对象已死的基本算法分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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