文章目錄
- 引用計數法
-
- jvm複習
- gc是什麼(分代收集算法)
- GC4大算法總體概述
- 複制算法
-
- 是什麼(原理)
- 動态示範
- 劣勢
- 标記清除算法
-
- 是什麼
- 劣勢
- 标記壓縮算法
-
- 原理
- 劣勢
- 總結
-
- 面試題
引用計數法
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CN3kDNxkjNwcDMwMmY1I2NzYzXwQjNwkTMxIzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
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算法。這是工作中實際使用的方法,但是不算一種新的算法。
沒有最好的算法,隻有根據每一代的垃圾收集的特性,選擇算法。新生代用複制算法,老年區域用标記清除,标記整理算法。沒有最好的垃圾回收機制,隻有最合适的。
總結