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會將失去參考的物件進行垃圾回收,具體回收細節,我將在下一篇博客講到
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/305089.html
標籤:其他
上一篇:SpringBoot成長記7:容器的擴展操作是如何執行的
下一篇:對于二叉樹的遍歷問題
