天天看點

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

文章目錄

  • 引用計數法
    • jvm複習
    • gc是什麼(分代收集算法)
    • GC4大算法總體概述
  • 複制算法
    • 是什麼(原理)
    • 動态示範
    • 劣勢
  • 标記清除算法
    • 是什麼
    • 劣勢
  • 标記壓縮算法
    • 原理
    • 劣勢
  • 總結
    • 面試題

引用計數法

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

jvm複習

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

gc是什麼(分代收集算法)

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

GC4大算法總體概述

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

總體概述:

4.2019年周陽老師JVM·第四部分四大垃圾回收算法
4.2019年周陽老師JVM·第四部分四大垃圾回收算法

為什麼full gc 要比 gc慢?

從大小上來說,old區占了三分之二,young區隻有三分之一。

四大算法清單:

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

引用計數法,隻需要了解,幾乎不會用。

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

答jvm就三方面:有哪些?怎麼用?各自優缺點?

引用計數法代碼示範:

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

上述代碼就産生了互相引用,哪怕主引用置空了,但是堆裡面還存在着具體的引用,無法被回收。

因為這種缺陷,是以現在幾乎不用了。

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

上述方法是手動喚醒GC。你隻是建議jvm去gc,而不能精準控制觸發gc。并不是立刻執行的。實際工作中禁止使用!

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

談談你對陰影部分的了解?隻有一個空的main函數,背景有幾個線程?

答:2個線程。1個main線程,一個gc線程。

複制算法

複制之後有交換,誰空誰是to。

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

複制算法用在年輕代。

是什麼(原理)

4.2019年周陽老師JVM·第四部分四大垃圾回收算法
4.2019年周陽老師JVM·第四部分四大垃圾回收算法

java8不能超過15歲。如果你的老年代大,可以把移動到老年代的年齡降低一些。

動态示範

解釋:

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

分為兩塊,籠統的說是從from區複制到to區,但是實際上是eden區+from區經過minor gc之後,幸存的對象一起移動到to區,然後之前的from區變成了to 區,誰空誰是to。

不會産生記憶體空間,但是空間使用率不高!

4.2019年周陽老師JVM·第四部分四大垃圾回收算法
4.2019年周陽老師JVM·第四部分四大垃圾回收算法
4.2019年周陽老師JVM·第四部分四大垃圾回收算法

上圖形象的說明了這個過程。

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

劣勢

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

标記清除算法

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

标記整理算法也叫标記壓縮算法。

是什麼

4.2019年周陽老師JVM·第四部分四大垃圾回收算法
4.2019年周陽老師JVM·第四部分四大垃圾回收算法

簡單版本了解:标出垃圾,收垃圾!

節約了記憶體空間,但是産生了記憶體碎片!

4.2019年周陽老師JVM·第四部分四大垃圾回收算法
4.2019年周陽老師JVM·第四部分四大垃圾回收算法

耗時嚴重,是因為這種回收算法是把線程暫停,而且需要掃描兩次!

劣勢

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

标記壓縮算法

也叫标記-清除-壓縮算法,标記整理算法,多一步整理的功能。

4.2019年周陽老師JVM·第四部分四大垃圾回收算法

原理

4.2019年周陽老師JVM·第四部分四大垃圾回收算法
4.2019年周陽老師JVM·第四部分四大垃圾回收算法
4.2019年周陽老師JVM·第四部分四大垃圾回收算法

劣勢

4.2019年周陽老師JVM·第四部分四大垃圾回收算法
4.2019年周陽老師JVM·第四部分四大垃圾回收算法

這種可以當作第五種gc算法。這是工作中實際使用的方法,但是不算一種新的算法。

沒有最好的算法,隻有根據每一代的垃圾收集的特性,選擇算法。新生代用複制算法,老年區域用标記清除,标記整理算法。沒有最好的垃圾回收機制,隻有最合适的。

總結

面試題