您現在的位置是:首頁 > 網路遊戲首頁網路遊戲

Java學習:垃圾回收器的基本原理是什麼?

  • 由 黑馬程式設計師 發表于 網路遊戲
  • 2023-01-27
簡介先來結合一段Java程式碼的執行理解記憶體劃分執行 javac 命令編譯原始碼為位元組碼執行 java 命令建立 JVM,呼叫類載入子系統載入 class,將類的資訊存入方法區建立 main 執行緒,使用的記憶體區域是JVM虛擬機器棧,開始

什麼是德國產物理伺服器

先來結合一段Java程式碼的執行理解記憶體劃分

Java學習:垃圾回收器的基本原理是什麼?

執行 javac 命令編譯原始碼為位元組碼

執行 java 命令

建立 JVM,呼叫類載入子系統載入 class,將類的資訊存入

方法區

建立 main 執行緒,使用的記憶體區域是

JVM

虛擬機器棧

,開始執行 main 方法程式碼

如果遇到了未見過的類,會繼續觸發類載入過程,同樣會存入

方法區

需要建立物件,會使用

記憶體來儲存物件

不再使用的物件,會由

垃圾回收器

在記憶體不足時回收其記憶體

呼叫方法時,方法內的區域性變數、方法引數所使用的是

JVM 虛擬機器棧

中的

棧幀記憶體

呼叫方法時,先要到

方法區

獲得到該方法的

位元組碼指令

,由

直譯器

將位元組碼指令解釋為機器碼執行

呼叫方法時,會將要執行的指令行號讀到

程式計數器

,這樣當發生了執行緒切換,恢復時就可以從中斷的位置繼續

對於非 java 實現的方法呼叫,使用記憶體稱為

本地方法棧

(見說明)

對於熱點方法呼叫,或者頻繁的迴圈程式碼,由

JIT 即時編譯器

將這些程式碼編譯成

機器碼快取

,提高執行效能

說明

加粗字型代表了 JVM

虛擬機器元件

對於 Oracle 的 Hotspot 虛擬機器實現,不區分虛擬機器棧和本地方法棧

會發生記憶體溢位的區域

不會出現記憶體溢位的區域 – 程式計數器

出現 OutOfMemoryError 的情況

堆記憶體

耗盡 – 物件越來越多,又一直在使用,不能被垃圾回收

方法區記憶體耗盡 – 載入的類越來越多,很多框架都會在執行期間動態產生新的類

虛擬機器棧累積 – 每個執行緒最多會佔用 1 M 記憶體,執行緒個數越來越多,而又長時間執行不銷燬時

出現 StackOverflowError 的區域

JVM 虛擬機器棧,原因有方法遞迴呼叫未正確結束、反序列化 json 時迴圈引用

JVM 垃圾回收器

垃圾回收器— G1 GC

響應時間與吞吐量兼顧

劃分成多個區域,每個區域都可以充當 eden,survivor,old, humongous,其中 humongous 專為大物件準備

分成三個階段:新生代回收、併發標記、混合收集

如果併發失敗(即回收速度趕不上建立新物件速度),會觸發 Full GC

G1 回收階段 - 新生代回收

初始時,所有區域都處於空閒狀態

Java學習:垃圾回收器的基本原理是什麼?

建立了一些物件,挑出一些空閒區域作為伊甸園區儲存這些物件

Java學習:垃圾回收器的基本原理是什麼?

伊甸園

需要垃圾回收時,挑出一個空閒區域作為倖存區,用

複製演算法

複製存活物件,需要暫停

使用者執行緒

Java學習:垃圾回收器的基本原理是什麼?

複製完成,將之前的伊甸園記憶體釋放

Java學習:垃圾回收器的基本原理是什麼?

隨著時間流逝,伊甸園的記憶體又有不足

Java學習:垃圾回收器的基本原理是什麼?

將伊甸園以及之前倖存區中的存活物件,採用複製演算法,複製到新的倖存區,其中較老物件晉升至老年代

Java學習:垃圾回收器的基本原理是什麼?

釋放伊甸園以及之前倖存區的記憶體

Java學習:垃圾回收器的基本原理是什麼?

G1 回收階段 - 併發標記與混合收集

當老年代佔用記憶體超過閾值後,觸發併發標記,這時無需暫停使用者執行緒

Java學習:垃圾回收器的基本原理是什麼?

併發標記之後,會有重新標記階段解決漏標問題,此時需要暫停使用者執行緒。這些都完成後就知道了老年代有哪些存活物件,隨後進入混合收集階段。此時不會對所有老年代區域進行回收,而是根據

**暫停時間目標**

優先回收價值高(存活物件少)的區域(這也是 Gabage First 名稱的由來)。

Java學習:垃圾回收器的基本原理是什麼?

混合收集階段

中,參與複製的有 eden、survivor、old,下圖顯示了伊甸園和倖存區的存活物件複製

Java學習:垃圾回收器的基本原理是什麼?

圖顯示了老年代和倖存區晉升的存活物件的複製

Java學習:垃圾回收器的基本原理是什麼?

複製完成,記憶體得到釋放。進入下一輪的新生代回收、併發標記、混合收集

Java學習:垃圾回收器的基本原理是什麼?

Top