上小節我們瞭解了常見的垃圾收集器,本小節將從內存回收、常用垃圾算法、常見面試題等維度拓展垃圾收集機制知識
爲什麼學這些(來自剛接觸者的疑惑):我們僅知道GC垃圾收集器,那何時回收內存、回收哪些內存、垃圾回收算法有哪些等等…這些問題對於想深入探索的小夥伴是不是很有「吸引力」,因爲可以讓我們更好的理解JVM工作原理
好了,我們開始正文知識的探索吧!
JVM的內存結構包括五大區域:程序計數器、虛擬機棧、本地方法棧、堆區、方法區。垃圾收集器所需關注主要在Java堆區和方法區,這部分內存的分配和回收是動態的。其它幾個區域內存分配和回收都具備確定性,法結束或者線程結束時,內存自然就跟隨着回收了。
垃圾收集器在對堆區和方法區進行回收前,判斷對象是否存活這就涉及到算法了,我們來了解下吧!
一句話:如果對象存在被引用,則計數器加一,失效則減一;如果計數器爲0,就可以回收。
引用計數是垃圾收集器中的早期策略。在這種方法中,堆中每個對象實例都有一個引用計數。當一個對象被創建時,就將該對象實例