引用計數法
jvm複習
gc是什麼(分代收集算法)
GC4大算法總體概述
總體概述:
爲什麼full gc 要比 gc慢?
從大小上來說,old區佔了三分之二,young區只有三分之一。
四大算法清單:
引用計數法,只需要瞭解,幾乎不會用。
答jvm就三方面:有哪些?怎麼用?各自優缺點?
引用計數法代碼演示:
上述代碼就產生了互相引用,哪怕主引用置空了,但是堆裏面還存在着具體的引用,無法被回收。
因爲這種缺陷,所以現在幾乎不用了。
上述方法是手動喚醒GC。你只是建議jvm去gc,而不能精準控制觸發gc。並不是立刻執行的。實際工作中禁止使用!
談談你對陰影部分的理解?只有一個空的main函數,後臺有幾個線程?
答:2個線程。1個main線程,一個gc線程。
複製算法
複製之後有交換,誰空誰是to。
複製算法用在年輕代。
是什麼(原理)
java8不能超過15歲。如果你的老年代大,可以把移動到老年代的年齡降低一些。
動態演示
解釋:
分爲兩塊,籠統的說是從from區複製到to區,但是實際上是eden區+from區經過minor gc之後,倖存的對象一起移動到to區,然後之前的from區變成了to 區,誰空誰是to。
不會產生內存空間,但是空間利用率不高!
上圖形象的說明了這個過程。
劣勢
標記清除算法
標記整理算法也叫標記壓縮算法。
是什麼
簡單版本理解:標出垃圾,收垃圾!
節約了內存空間,但是產生了內存碎片!
耗時嚴重,是因爲這種回收算法是把線程暫停,而且需要掃描兩次!
劣勢
標記壓縮算法
也叫標記-清除-壓縮算法,標記整理算法,多一步整理的功能。
原理
劣勢
這種可以當作第五種gc算法。這是工作中實際使用的方法,但是不算一種新的算法。
沒有最好的算法,只有根據每一代的垃圾收集的特性,選擇算法。新生代用複製算法,老年區域用標記清除,標記整理算法。沒有最好的垃圾回收機制,只有最合適的。
總結
請你比較一下gc算法各自的優缺點,就答這個就ok了。
java9以後的默認垃圾收集器,G1垃圾回收!