1、 JVM含義: JRE是由java API和JVM組成的。JVM的主要作用是通過Class Loader來加載Java程序,并且按照Java API來執行加載的程序。JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。簡單的說就是在內存中分出一塊區域給JVM,JVM就是模擬真正計算機的功能。 我們在編輯器編輯Java代碼時,運行main方法,會把我們的代碼轉換成.class的字節碼文件(二進制),jvm就執行這些字節碼文件,在通過解釋器向平臺輸出,就可以在多種平臺上不加修改地運行。不同的操作系統對應的解釋器不一樣,解釋器就是為了讓java實現跨平臺。 (注意:java并不是能跨所有的平臺,只是支持現有的大多數平臺,像中國自己銀河麒麟系統java也是支持的,因為銀河麒麟基本上就是linux系統來的。但是如果是一個新的系統,JAVA解釋器不支持的話,那么就無法在這個平臺上操作了。) JVM對其實現的某些方面給出了具體的定義,特別是對Java可執行代碼,即字節碼(Bytecode)的格式給出了明確的規格。這一規格包括操作碼 和操作數的語法和數值、標識符的數值表示方式、以及Java類文件中的Java對象、常量緩沖池在JVM的存儲映象。 Jvm定義了控制java代碼解釋執行和具體實現的五種規格:1、jvm指令系統;2、jvm寄存器;3、jvm棧結構;4、jvm碎片回收堆;5、jvm存儲區 2.Jvm原理 jvm原理如 jvm執行過程如下圖所示:
JVM是java的核心和基礎,jvm是處于java編輯器和os平臺之間的虛擬處理器。Jvm是一種基于下層操作系統和硬件平臺并利用軟件方法實現的抽象的 計算機,可以在上面執行字節碼文件。 執行過程: (1)最開始是編輯器生成JVM能識別的.class文件 (2)運行類加載機制 加載.class文件到內存中,并對數據進行校驗、解析和初始化,最終形成JVM可以直接使用的java類型的全過程。 
1)加載:將.class文件加載到內存,并將這些靜態數據轉換成方法區中的運行時數據結構,在堆中生成代表這個類的java.lang.Class的對象,作為 方法區類數據的訪問入口,這個過程需要類加載器的參與。
2)鏈接:將java的二進制代碼合并到JVM的過程; 驗證:確保加載的類信息符合JVM規范,不存在安全問題; 準備:正式為類變量(static變量)分配內存并設置類變量初始值的階段,這些內存都將在方法區中進行分配; 解析:虛擬機常量池的符號引用替換為字節引用過程; 3)初始化 初始化階段是執行類構造器()方法的過程。類構造器()方法是由編譯器自動收藏類中的所有類變量的賦值動作和靜態語句塊(static塊)中的語句合并產生; 當初始化一個類的時候,如果發現其父類還沒有進行過初始化,則需要先觸發其父類的初 始化; 虛擬機會保證一個類的()方法在多線程環境中被正確加鎖和同步; 當范圍一個Java類的靜態域時,只有真正聲名這個域的類才會被初始化; Eg:加載機制示例: 代碼如下 public class Demo01 { public static void main(String[] args) { A a = new A(); System.out.PRintln(a.width); } } class A{ public static int width=100; //靜態變量,靜態域 field static{ System.out.println(“靜態初始化類A”); width = 300 ; } public A() { System.out.println(“創建A類的對象”); } } 分析圖: 
說明: 內存中存在著棧,堆,方法區(特殊的堆) 1、JVM在加載Demo1時,現在方法區中產生Demo1對應的靜態靜態數據,同時在堆中產生一個java.lang.class的對象,用來代表Demo1類,然后通過對象可以訪問類的二進制結構; 2、Main方法在執行時產生一個main方法的棧幀,一個方法對應一個棧幀,當main方法中調用其他方法時,會在棧里挨個往里壓。 (注:每當啟動一個新線程的時候,Java虛擬機都會為它分配一個java棧。java以棧幀為單位保存線程的運行狀態。虛擬機只會對java棧執行兩種操作:以棧幀為單位的壓?;蛘叱鰲!?/p>
java方法可以通過兩種方式完成,一種通過return返回,成為正常返回;一種通過拋出異常而異常終止 。虛擬機都會將當前棧彈出java棧然后釋放掉,這樣上一個方法的棧幀就是當前棧幀了。
java棧上是此對應的java線程所私有的。因此不存在多線程情況下棧數據訪問同步的問題。) 3、當調用A.width時,調用方法區數據。
——2017年2月20日
新聞熱點
疑難解答