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