一、JVM的概念
在了解JVM的概念之前,我們先來了解java平台的邏輯結構,圖片來自《深入Java虛擬機》
深入Java虛擬機(原書第2版) PDF【中文版+附光盤源碼】 下載見 http://www.linuxidc.com/Linux/2013-06/86222.htm
從圖中我們可以看到jdk包含了jre,java語言和java開發工具和Api,jre包含了java運行的基礎類庫和java虛擬機,java虛擬機支撐著java程序的運行。
JVM(java virtual machine)翻譯為java虛擬機,從字面上來理解,JVM就是一個虛擬的機器,其實類似於一個操作系統,通過軟件去虛擬出一個虛擬機,幫助我們管理計算機的內存和調用計算機的硬件等等。而JVM就是java程序運行時的虛擬機,在java程序運行時,JVM將java字節碼文件轉換成當前物理機認識的機器語言並且管理程序運行時候的內存,執行當前程序的代碼,調用相關的硬件,從而得到程序運行的結果。
二、java程序的工作原理。
java程序源文件(.java)由java編譯工具編譯成.class文件,JVM中的類加載器讀取.class中的字節碼內容,並執行其中的字節碼指令,在此期間,JVM還兼顧著管理java程序的運行內存,通過操作系統來調用相關硬件。
三、JVM運行時內存分布
JVM的運行過程中將java程序運行時數據區分為以下幾個部分:
(1)程序計數器:存儲虛擬機字節碼執行的地址
(2)java虛擬機棧:java方法運行時的局部變量表,操作數棧,方法出口等
(3)本地方法棧:類似於java虛擬機棧,運行Native本地方法時存儲局部變量表,操作數棧,方法出口等
(4)方法區:存放程序的常量,靜態變量,類加載後的信息,即時編譯器編譯後的代碼。
(5)java堆:是虛擬機中最大的一塊內存,用於存放對象實例
(6)運行時常量池:方法區的一部分,存放程序運行時的常量和符號引用。