中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

仪陇县| 平阴县| 疏勒县| 长海县| 城口县| 太仓市| 莫力| 许昌市| 墨江| 卢湾区| 汉寿县| 康平县| 武宁县| 榆中县| 金乡县| 华池县| 清苑县| 深泽县| 盖州市| 马鞍山市| 崇州市| 贵南县| 泸西县| 榆林市| 宁城县| 禹城市| 深圳市| 土默特左旗| 张掖市| 启东市| 乌兰浩特市| 峨眉山市| 呈贡县| 临湘市| 宁波市| 台湾省| 莱芜市| 中宁县| 哈尔滨市| 岑巩县| 临城县|