所謂jvm垃圾回收機制其實就是相較于于c、c++語言的優(yōu)勢之一是自帶垃圾回收器,垃圾回收是指不定時去堆內(nèi)存中清理不可達對象。垃圾收集器在一個Java程序中的執(zhí)行是自動的,不能強制執(zhí)行,程序員唯一能做的就是通過調(diào)用System.gc 方法來建議執(zhí)行垃圾收集器。
為什么需要垃圾回收
如果沒有進行垃圾回收,那么內(nèi)存肯定會被消耗完的,因為我們在不斷的分配內(nèi)存空間而不進行回收。除非內(nèi)存無限大,我們可以任性的分配而不回收,但是事實并非如此。所以,垃圾回收是必須的。
jvm垃圾回收機制的原理
在JVM運行時數(shù)據(jù)區(qū)存在一個堆區(qū), 堆是一個巨大的對象池。在這個對象池中管理著數(shù)量巨大的對象實例,而池中對象的引用層次,有的是很深的。一個被頻繁調(diào)用的接口,每秒生成對象的速度,是很大的,同時,對象之間的關(guān)系,形成了一張巨大的網(wǎng)。
Java 一直在營造一種無限內(nèi)存的氛圍,但對象不能只增不減,所以需要垃圾回收;那 JVM 是如何判斷哪些對象應(yīng)該被回收?哪些應(yīng)該被保持呢?這就要用到JVM的垃圾回收機制了,也就是我們常說的GC(Garbage Collection),也叫垃圾收集器。
對象被標(biāo)記為垃圾方法
JVM的內(nèi)存結(jié)構(gòu)包括五大區(qū)域:程序計數(shù)器、虛擬機棧、本地方法棧、堆區(qū)、方法區(qū)。其中程序計數(shù)器、虛擬機棧、本地方法棧3個區(qū)域隨線程而生、隨線程而滅,因此這幾個區(qū)域的內(nèi)存分配和回收都具備確定性,就不需要過多考慮回收的問題,因為方法結(jié)束或者線程結(jié)束時,內(nèi)存自然就跟隨著回收了。而Java堆區(qū)和方法區(qū)則不一樣,這部分內(nèi)存的分配和回收是動態(tài)的,正是垃圾收集器所需關(guān)注的部分。
以上就是什么是jvm垃圾回收機制?關(guān)于垃圾回收機制詳情介紹的相關(guān)內(nèi)容。