1.JVM是一種規(guī)范和運行時數(shù)據(jù)區(qū)
java程序運行過程

源碼-> Java->.class->JVM ->ClassLoader
解釋執(zhí)行:
JVM C++寫的 C++解釋器
經(jīng)過JVM的翻譯,速度相對慢一點
JIT執(zhí)行(hotspot):
java代碼 翻譯成 匯編 (機器碼) 放到codcase
速度比加快
JDK JRE JVM
JRE 包含JVM和一些java類庫
JVM的跨平臺 (不同平臺對應不同的JVM)
JVM的語言無關性(跟語言無關性,只要語言可以翻譯成class文件)

常見的JVM實現(xiàn)
1.hotspot Jrockit. Oracle
2 J9 IBM
3 LiquidVM BEA
4 Zing(C4算法 垃圾回收算法)
5 TaobaoVM
6 畢昇 華為
運行時數(shù)據(jù)區(qū)

線程共享區(qū):方法區(qū)(運行時常量池) 堆
線程私有區(qū):虛擬機棧 本地方法棧 程序計數(shù)器
直接內(nèi)存(對外內(nèi)存)
2.棧幀的執(zhí)行對內(nèi)存區(qū)域的影響

java方法的運行與虛擬機棧
虛擬機棧:存儲當前線程運行java方法所需的數(shù)據(jù)、指令、返回地址
棧幀
大小限制:-Xss
棧溢出:
超出虛擬機大小限制(方法死遞歸)
棧幀:
一個方法對應一個棧幀
局部變量表:記錄方法中所有的局部變量
操作數(shù)棧:記錄當前的操作數(shù)
完成出口:記錄方法的完成行號
程序計數(shù)器:指向當前線程正在執(zhí)行的字節(jié)碼指令(字節(jié)碼行號)
字節(jié)碼的行號針對本方法的偏移
本地方法棧
方法區(qū)
直接內(nèi)存 unsafe 繞過了JVM的垃圾回收
堆
深入理解JVM內(nèi)存區(qū)域

JVM內(nèi)存處理流程:
JVM申請內(nèi)存
初始化運行時數(shù)據(jù)區(qū)
類加載
執(zhí)行方法
創(chuàng)建對象
JHSDB工具:查看內(nèi)存
內(nèi)存虛擬化
堆溢出
棧溢出
方法區(qū)溢出
直接內(nèi)存溢出