JVM內存模型


JVM內存模型包括 堆 (Heap)、方法區(Method Area)、程序計數器(PC Register)、虛擬機棧(JVM Stacks)、本地方法棧(Native Method Stacks)

 

 

一、Java加載過程:

Java Source 需要經過Javac 命令編譯為Java class 字節碼文件,才能夠被Java虛擬機所執行,同樣這個字節碼文件是一個可以跨平台的,適用於不同平台的機器碼。

執行Javac 命令后會創建一個Java虛擬機並創建一個叫 main 的主線程 ,執行主方法,這個線程需要虛擬機棧(JVM Stacks)來分配內存,同樣Java創建的其他的一些線程也是同樣的。Java方法、局部變量、方法參數等也存放在這里

JVM 見到一個新的類,就會觸發類加載機制,由類加載子系統對類進行加載

 

二、JVM內存結構:

方法區:將類的原始信息(類名、成員變量、類繼承關系、方法代碼等)讀取到內存當中,將此字節碼信息,讀取到內存中的方法區中

堆:類創建的實例對象存放在堆中 

本地方法棧:需要調用操作系統來執行的一些方法例如:hashcode  ,調用本地方法接口->本地庫(操作系統提供的功能)

注:有的版本的JVM會將虛擬機棧和本地方法棧合二為一,統稱虛擬機棧

程序計數器:用來記錄當前線程執行到什么地方,即使線程被切換走了,也可以切回來,而不需要重新開始執行

 

三、執行引擎:

Interpreter 解釋器:將Java 字節碼翻譯成機器碼,給操作系統 cpu執行

JITCompiler 即時編譯器:對於執行頻繁的熱聯代碼 需要經常解釋的,用到即時編譯器將他緩存起來,少了解釋的步驟,執行效率就有了很大的提升。

GC回收:JVM會將失去引用的對象進行垃圾回收,具體回收細節,我將在下一篇博客講到

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM