1、運行過程
(1)JIT 將熱點代碼直接編譯到系統里成本地代碼,加快執行速度
1.png
2、運行時數據區 結構
2.png
(1)程序計數器(線程私有):
① 為什么需要,因為系統有數據片輪轉機制,可能會暫停,所以需要記錄停在哪里,和下次從哪里繼續;
② 唯一不會OOM的
(2)虛擬機棧(線程私有):存儲當前線程運行方法所需的數據、指令、返回地址
① 棧幀(方法):局部變量表、操作數棧、動態鏈接、返回地址
② 操作數棧: java解釋執行(c基于硬件寄存器)
③ 動態鏈接:方法分派(靜態和動態)
(3)本地方法棧(線程私有)
(4)方法區:(<= jdk1.7 永久代 >=jdk1.8 元空間,機器內存)
① 類信息
② 常量
③ 靜態變量
④ 即時編譯期編譯后的代碼
(5)java堆
① 對象實例
② 數組
3、棧的優化
(1)方法內聯
3.png
(2)棧幀之間共享數據