JAVA虛擬機學習

Java虛擬機不同與系統虛擬機(VMware),而是一種進程虛擬機,如(adobe flash player),目前我們最常用的爲Oracle HotSpot 虛擬機

運行時數據區劃分

這裏寫圖片描述

java虛擬機棧是爲了執行class字節碼文件 後進先出棧
java本地方法棧 是爲了執行native方法的 後進先出棧
HotSpot將以上兩者合爲一體了
局部變量表:用於方法間參數傳遞,以及方法執行過程中存儲基礎數據類型的值和對象的引用

舉例:

int a=100int b=200;
int c=300;
return (a+b)*c

字節碼命令如下
這裏寫圖片描述
符號代表偏移量
0 bipush 100 表示將100錄入操作棧的棧頂 操作本身佔了一個偏移量,參數佔了一個偏移量
2 istore 1 表示把操作數棧的棧底出棧,並錄入局部變量表索引號爲1的位置
11 iload 1 將局部變量表中操作數爲1的數存入操作棧的棧頂 隨後200也存入,遵守後進先出原則
13 iadd 把操作數棧棧頂的兩個元素出棧,並把兩個數據相加的結果從新存入操作數棧棧頂
15 imul 與add類似
16 ireturn 將棧頂元素出棧,並作爲方法返回值返回

JAVA堆
java堆通常是java虛擬機中最大的一塊內存區域
java堆是java對象的主要存儲區域,可以實現自動內存管理,是全局共享的內存區域

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章