-
Java虛擬機的原理。
所謂虛擬機,就是一臺虛擬的機器,他是一款軟件,用來執行一系列虛擬計算指令,大體上虛擬機可分為系統虛擬機和程序虛擬機,他們完全是對物理的計算的仿真,提供一個可以運行完整操作系統的軟件平臺。程序虛擬機典型代碼就是Java虛擬機,他專門為執行單個計算程序而計算,在Java虛擬機中執行的指令我們稱為Java字節碼指令,無論是系統虛擬機還是程序虛擬機,在上面運行的軟件都被限制于虛擬機提供的資源中。
Java發展至今,出現過很多虛擬機,最初sun使用的一款叫做ClassIc的Java虛擬機,到現在引用最廣泛的HotSpot虛擬機,除了Sun以外,還有BEA的jrockit,目前jrockit和HostSopt都被Oracle收入旗下,大有整合的趨勢。
-
認識Java虛擬機的基本結構.
- 類加載系統:負責從文件系統或者網絡加載Class信息,加載的信息存放在一塊稱之為方法區的內存空間。
方法區:存放類的信息,常量信息,常量池信息,包括字符串字面量和數字常量
-
Java堆:在Java虛擬機啟動的時候建立Java堆,他是Java程序最主要的內存工作區域幾乎所有的對象實例都存放到Java堆中,堆空間是所有線程共享
。 - 直接內存:JavaNio庫允許Java程序直接內存,從而提高性能,通常直接內存速度會優于Java堆,(把數據直接放到內存中)Redis
-
Java棧:每個虛擬機線程都有一個私有棧,一個線程的Java棧在線程創建的時候被創建,Java棧保存著局部變量,方法參數,返回值等
。 -
本地方法棧:和Java棧非常類似,最大不同為本地方法棧用于本地方法調用
, -
垃圾回收系統:Java的核心,也是不可少的,Java有一套自己的進行垃圾清理的機制,開發人員無需手工清理
. - PC寄存器:寄存器也是每個線程私有的空間,Java虛擬機會為每個線程創建pc寄存器
- 執行引擎:虛擬機的核心組件就是執行引擎,他負責執行虛擬機的字節碼,一般會先進行編譯成機器碼后執行
-
總結
具體劃分為如下5個內存空間(非常重要)
- 棧:存放局部變量
- 堆:存放所有new出來的東西
- 方法區:被虛擬機加載是類信息,常量,靜態常量等
- 程序計數器(和系統相關)
- 本地方法棧
- Good Luck!