Java-100天知識進階-GC算法-知識鋪(五)

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

GC算法
file學習

1.標記清除算法3d

優缺點:不須要額外空間,可是遍歷空間花費大,並且會產生大量內存碎片
file對象

2.複製收集算法blog

佔用兩塊同樣大內存,每次只用使用一塊。當須要發生複製的時候,遍歷一遍可達對象,進行復制到另一塊內存中。From區轉移到To區,或把一下gc次數超過閾值的,轉移大Old區。原先的From區,整個清空。ip

優勢:只須要遍歷一遍內存

缺點:複製成本巨大、佔用內存多
file開發

3.標記整理算法get

3.1 採用標記-清除算法同樣的方式進行對象的標記zsh

3.2    採用複製清除算同樣將全部的存活對象往左端空閒空間移動

3.3    在一塊內存上操做,避免產生碎片

file

優缺點:相對標記清除來講,沒有了內存碎片,可是遍歷花費仍然很大。

4. GC根據堆內存空間不一樣區域,採用不一樣的算法回收

4.1 Young區:         複製收集算法

       緣由:對象較少,複製代價小

4.2 老區和方法區:標記清除或標記整理算法

  緣由:對象存活較多,次數少,較慢

其餘知識點:

1、GC 根

1.棧中引用的對象

2.方法區中的靜態成員

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

4.本地方法棧中JNI 本地Native方法

2、可到達性分析

 1.從任意根對象到某個對象均不可達時,這個對象就能夠被回收。 平常開發中,常常碰到某個大對象,也就是臨時使用下,而後拋棄。這個時候能夠有個好習慣,就是用完後賦值 null。可能不會當即被gc掉,可是有助於計算。

2. 當一個對象不在引用鏈上,這個時候可能想象成一張圖,對於孤島中的對象,就能夠gc掉。

3、實際中 JVM的gc算法

 1. 分代收集算法,   區分出 新生代GC 和 老年代GC

 2. 新生代 適合複製算法,這個區對象生產太頻繁,相應的GC也頻繁,使用這種空間換時間的收集算法比較合算。

 3. 老年代 適合標記清理或標記整理,這個區的對象成活率高,GC不須要很頻繁。

4、可觸及性

可觸及的

可復活的

不可觸及的

本文由zshipu.com學習筆記或整理或轉載,若有侵權請聯繫,必改之。

相關文章
相關標籤/搜索