JVM知識

JVM是Java的核心,雖然對於普通開發者這塊平常可能不太關注,但是如果一些基本原理不理解,有的時候發生一些疑難異常就會讓我們摸不到頭腦,無法解決這種意想不到的問題。JVM是通過指令系統、寄存器、棧結構、存儲區域和垃圾回收來執行我們的程序。大家可以通過下面的JVM架構圖更直觀的理解。


Class Loader:JVM通過模塊將Class文件加載到JVM內存中。

Execution Engine:執行引擎也叫解釋器,負責解釋命令,提交OS執行。

JNI:Java Native Interface直接操縱機器硬件,如Java程序驅動打印機。

Stack:棧是在線程創建時創建,線程結束棧內存也釋放,不存在GC問題。棧內存存儲局部變量、程序運行狀態、方法返回值等數據。棧中的數據以棧幀存在。棧幀是一個內存區塊,是有關方法和運行期數據的數據集。當一個方法fun1被調用就產生一個棧幀Frame1,壓入棧中,fun1方法又調用fun2方法,產生棧幀Frame2壓入棧。

Heap:各條線程共享的運行時內存區域,所有類實例和數組對象分配內存的區域,由GC管理。堆可以劃分爲新生區、養老區和永久區,如下圖。


新生代:類在這裏產生和應用,最後被垃圾回收。所有的類在伊甸區被new出來,當伊甸區滿了,GC不會對該區不用的對象銷燬,剩餘有用的轉到倖存區。

老年代:用於存放生成周期比較長的對象。

永久代:存放JDK自帶的class,interface。


發佈了94 篇原創文章 · 獲贊 102 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章