5.4JVM垃圾收集機制

JVM垃圾收集機制

在這裏插入圖片描述

一、前言

上小節我們瞭解了常見的垃圾收集器,本小節將從內存回收、常用垃圾算法、常見面試題等維度拓展垃圾收集機制知識

爲什麼學這些(來自剛接觸者的疑惑):我們僅知道GC垃圾收集器,那何時回收內存、回收哪些內存、垃圾回收算法有哪些等等…這些問題對於想深入探索的小夥伴是不是很有「吸引力」,因爲可以讓我們更好的理解JVM工作原理

好了,我們開始正文知識的探索吧!

二、正文

2.1 內存回收

JVM的內存結構包括五大區域:程序計數器、虛擬機棧、本地方法棧、堆區、方法區。垃圾收集器所需關注主要在Java堆區和方法區,這部分內存的分配和回收是動態的。其它幾個區域內存分配和回收都具備確定性,法結束或者線程結束時,內存自然就跟隨着回收了。

垃圾收集器在對堆區和方法區進行回收前,判斷對象是否存活這就涉及到算法了,我們來了解下吧!

2.2 垃圾收集算法

1)引用計數算法

一句話:如果對象存在被引用,則計數器加一,失效則減一;如果計數器爲0,就可以回收。

引用計數是垃圾收集器中的早期策略。在這種方法中,堆中每個對象實例都有一個引用計數。當一個對象被創建時,就將該對象實例