知識鋪: 致力于打造輕知識點,持續更新每次的知識點較少,閱讀不累,不占太多時間,不停的來喚醒你記憶深處的知識點,
GC演算法

1.標記清除演算法
優缺點:不需要額外空間,但是遍歷空間花費大,而且會產生大量記憶體碎片

2.復制收集演算法
占用兩塊一樣大記憶體,每次只用使用一塊,當需要發生復制的時候,遍歷一遍可達物件,進行復制到另外一塊記憶體中,From區轉移到To區,或把一下gc次數超過閾值的,轉移大Old區,原先的From區,整個清空,
優點:只需要遍歷一遍
缺點:復制成本巨大、占用記憶體多

3.標記整理演算法
3.1 采用標記-清除演算法一樣的方式進行物件的標記
3.2 采用復制清除算一樣將所有的存活物件往左端空閑空間移動
3.3 在一塊記憶體上操作,避免產生碎片

優缺點:相對標記清除來說,沒有了記憶體碎片,但是遍歷花費仍然很大,
4. GC根據堆記憶體空間不同區域,采用不同的演算法回收
4.1 Young區: 復制收集演算法
原因:物件較少,復制代價小
4.2 老區和方法區:標記清除或標記整理演算法
原因:物件存活較多,次數少,較慢
其他知識點:
一、GC 根
1.堆疊中參考的物件
2.方法區中的靜態成員
3.方法區中常量參考的物件 全域變數
4.本地方法堆疊中JNI 本地Native方法
二、可到達性分析
1.從任意根物件到某個物件均不可達時,這個物件就可以被回收, 日常開發中,經常碰到某個大物件,也就是臨時使用下,然后拋棄,這個時候可以有個好習慣,就是用完后賦值 null,可能不會立即被gc掉,但是有助于計算,
2. 當一個物件不在參考鏈上,這個時候可能想象成一張圖,對于孤島中的物件,就可以gc掉,
三、實際中 JVM的gc演算法
1. 分代收集演算法, 區分出 新生代GC 和 老年代GC
2. 新生代 適合復制演算法,這個區物件生產太頻繁,相應的GC也頻繁,使用這種空間換時間的收集演算法比較合算,
3. 老年代 適合標記清理或標記整理,這個區的物件成活率高,GC不需要很頻繁,
四、可觸及性
可觸及的
可復活的
不可觸及的
本文由zshipu.com學習筆記或整理或轉載,如有侵權請聯系,必改之,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/51412.html
標籤:其他
