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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

垃圾回收算法简单介绍——JVM读书笔记lt;二gt;

發布時間:2024/1/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 垃圾回收算法简单介绍——JVM读书笔记lt;二gt; 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

垃圾回收的過程主要包含兩部分:找出已死去的對象、移除已死去的對象。

確定哪些對象存活有兩種方式:引用計數算法、可達性分析算法。

方案一:引用計數算法

給對象中加入一個引用計數器。每當有一個地方引用它時。計數器值加1;當引用失效時,計數器值減1;計數器的值為0時即表明對象已經死去(可被回收)。

長處:實現簡單。判定效率高。

缺點:難解決對象之間互相引用的問題。

如:對象objA和objB都有字段instance,令objA.instance=objB,objB.instance=objA;除此之外。objA和objB再無其它引用,理論上objA和objB能夠被回收(無法被訪問),但由于計數器變為0,所以導致內存泄露。

方案二:可達性分析算法

通過“GC Roots”對象作為起始點,從這些節點開始向下搜索。被搜索到的對象marked,堆中未被maked的對象表明不可達(可被回收)。

在Java語言中。課作為GC Roots的對象包含例如以下四種:

1.虛擬機棧(棧幀中的本地變量表)中引用的對象

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

3.方法區中常量引用的對象

4.本地方法棧中JNI(即一般說的Native方法)引用的對象


垃圾收集算法:

1.標記-清除(Mark-Sweep):用上面描寫敘述的方法標記出須要回收的對象。標記后統一回收全部被標記的對象。

2. 復制算法: 為了解決上述算法清除造成可用空間碎片化的問題,復制算法將內存空間分成大小相等的兩部分。當一部分使用完時,將存活的對象移至還有一部分。

3. 標記-整理(Mark-Compact):上述算法造成實際使用空間僅僅占了分配空間的一半,標記-整理算法在標記后,將全部存活對象向一端移動,然后直接清理掉端邊界以外的內存。

4.分代收集算法:研究表明新生代中的對象98%是“朝生夕死”的。所以將對象加入年齡屬性,依據不同的年齡決定對象存放位置。詳細可參考Java垃圾回收


說明:本文的內容參考書籍《深入理解Java虛擬機(第2版)

轉載于:https://www.cnblogs.com/zfyouxi/p/5207896.html

總結

以上是生活随笔為你收集整理的垃圾回收算法简单介绍——JVM读书笔记lt;二gt;的全部內容,希望文章能夠幫你解決所遇到的問題。

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