亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java垃圾回收算法中復制算法的原理是什么

發布時間:2022-01-14 11:01:58 來源:億速云 閱讀:125 作者:iii 欄目:大數據

今天小編給大家分享一下java垃圾回收算法中復制算法的原理是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

算法原理

復制算法首先將或者的內存空間分為2塊,每次只使用其中一塊,在垃圾會搜時將正在使用的內存中的存活對象復
制到未被使用的內存塊中,之后清楚正在使用的內存塊中的所有對象,交換2個內存的角色,最后完成垃圾回收。

java垃圾回收算法中復制算法的原理是什么  
image

年輕代中的GC

HotSpot JVM把年輕代分為了三部分:1個Eden區和2個Survivor區(分別叫fromto)。默認比例為8:1,為啥默認會是這個比例,接下來我們會聊到。一般情況下,新創建的對象都會被分配到Eden區(一些大對象特殊處理),這些對象經過第一次Minor GC后,如果仍然存活,將會被移到Survivor區。對象在Survivor區中每熬過一次Minor GC,年齡就會增加1歲,當它的年齡增加到一定程度時,就會被移動到年老代中。

因為年輕代中的對象基本都是朝生夕死的(80%以上),所以在年輕代的垃圾回收算法使用的是復制算法,復制算法的基本思想就是將內存分為兩塊,每次只用其中一塊,當這一塊內存用完,就將還活著的對象復制到另外一塊上面。復制算法不會產生內存碎片。

GC開始的時候,對象只會存在于Eden區和名為“From”的Survivor區Survivor區“To”是空的。緊接著進行GCEden區中所有存活的對象都會被復制到“To”,而在“From”區中,仍存活的對象會根據他們的年齡值來決定去向。年齡達到一定值(年齡閾值,可以通過-XX:MaxTenuringThreshold來設置)的對象會被移動到年老代中,沒有達到閾值的對象會被復制到“To”區域。經過這次GC后,Eden區From區已經被清空。這個時候,“From”和“To”會交換他們的角色,也就是新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的“To”。不管怎樣,都會保證名為To的Survivor區域是空的。Minor GC會一直重復這樣的過程,直到“To”區被填滿,“To”區被填滿之后,會將所有對象移動到年老代中。

存在問題

由于JVM中的絕大多數對象都是瞬時狀態的,生命周期非常短暫,所以復制算法被廣泛應用于年輕代中。分區、復制的思路不僅大幅提升了垃圾回收的效率,而且也將原本復雜的內存分配算法變的前所未有的簡明扼要(既然每次內存回收都是對整個半區空間的回收,內存分配時也就不用考慮內存碎片等復雜情況,只要移動堆頂指針,按順序分配內存就可以了)。
不過在垃圾收集技術中,復制算法提高效率的代價是認為的將可用內存縮小了一半。

以上就是“java垃圾回收算法中復制算法的原理是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江津市| 镇原县| 报价| 浦北县| 柘荣县| 五原县| 文水县| 肃北| 永康市| 武山县| 石渠县| 深州市| 北海市| 南投县| 阿鲁科尔沁旗| 和政县| 彰武县| 宣恩县| 凤庆县| 塔城市| 孝义市| 遵化市| 讷河市| 广灵县| 辽宁省| 马边| 山丹县| 洱源县| 滕州市| 乌兰浩特市| 青浦区| 达拉特旗| 阿合奇县| 光山县| 曲沃县| 东方市| 江西省| 达州市| 望都县| 灌南县| 洞口县|