新生代的複製 清除演算法實現原理

2021-09-28 15:00:20 字數 1027 閱讀 5406

在新生代的複製演算法中將除新生代的eden區域以外的記憶體空間一分為二,分別稱為s0區和s2區

s0和s1將可用記憶體按容量分成大小相等的兩塊,每次只使用其中一塊,當這塊記憶體使用完了,就將還存活的物件複製到另一塊記憶體上去,然後把使用過的記憶體空間一次清理掉。這樣使得每次都是對其中一塊記憶體進行**,記憶體分配時不用考慮記憶體碎片等複雜情況,只需要移動堆頂指標,按順序分配記憶體即可,實現簡單,執行高效。

複製演算法的缺點顯而易見,可使用的記憶體降為原來一半。

乙個簡單的例子

下圖為乙個堆,左邊的是新生代,右邊的是老年代

此時從eden區存在兩個物件user1和user2,經過gc的觀察,發現這兩個物件都經常使用,因此將這兩個物件轉出

user1和use2進入到s0區,第一次資料轉入是隨機的,第一次轉入可能轉到s0區,也可能轉到s1區

又經過gc的考察,發現user1經常被使用,所以將user1複製到s1區,同時清空s0區

同一時刻,s0和s1區只能有乙個區存在資料,另乙個區一定是空的

此時又新增了乙個新的物件user3,user3一定會存到s1中

經過gc的考驗,user1經常被使用,所以將user複製到s0區,同時清空s1區,資料會在s0和s1之間不斷迴圈,當某乙個資料經過了18次gc篩選仍然存活,就將其轉到老年代

Young Gen新生代演算法

sun oracle 的 hotspot jvm 又把新生代進一步劃分為 3 個區域 1.乙個相對大點的區域,稱為 伊甸園區 eden 2.兩個相對小點的區域稱為 from 倖存區 survivor 和 to 倖存區 survivor 按照規定,新物件會首先分配在 eden 中 如果新物件過大,會直...

新生代的配置

引數 xmn可以用於設定新生代的大小。設定乙個較大的新生代大小會減少老年代的大小,此引數對系統效能以及gc影響很大。新生代的大小一般設定為整個堆空間的1 3到1 4左右。引數 xx survivorratio用來設定新生代中eden空間和from to空間的比例關係,如下 xx survivorra...

商業的結構化思維《商業模式新生代》

看完這本書之後最大的乙個收穫就是,獲得了乙個非常棒結構化思考框架,用於分析商業問題。這個框架就是基於每個專案商業模式畫布的九個模組,它們分別是 價值主張 客戶細分 渠道 客戶關係 收入 關鍵業務 核心資源 重要合作 主要成本。在我羅列這些要素時信手拈來,並沒有回看查閱,一方面是因為把它實際運用到了自...