JVM內(nèi)存管理-運行時數(shù)據(jù)區(qū)

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


java程序運行過程.png

源碼-> 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).png

常見的JVM實現(xiàn)
1.hotspot Jrockit. Oracle
2 J9 IBM
3 LiquidVM BEA
4 Zing(C4算法 垃圾回收算法)
5 TaobaoVM
6 畢昇 華為

運行時數(shù)據(jù)區(qū)


運行時數(shù)據(jù)區(qū).png

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

2.棧幀的執(zhí)行對內(nèi)存區(qū)域的影響


棧幀的執(zhí)行對內(nèi)存區(qū)域的影響.png

java方法的運行與虛擬機棧
虛擬機棧:存儲當前線程運行java方法所需的數(shù)據(jù)、指令、返回地址
棧幀
大小限制:-Xss
棧溢出:
超出虛擬機大小限制(方法死遞歸)
棧幀:
一個方法對應一個棧幀

局部變量表:記錄方法中所有的局部變量
操作數(shù)棧:記錄當前的操作數(shù)
完成出口:記錄方法的完成行號
程序計數(shù)器:指向當前線程正在執(zhí)行的字節(jié)碼指令(字節(jié)碼行號)

字節(jié)碼的行號針對本方法的偏移

本地方法棧
方法區(qū)
直接內(nèi)存 unsafe 繞過了JVM的垃圾回收

深入理解JVM內(nèi)存區(qū)域


深入理解JVM內(nèi)存區(qū)域.png

JVM內(nèi)存處理流程:
JVM申請內(nèi)存
初始化運行時數(shù)據(jù)區(qū)
類加載
執(zhí)行方法
創(chuàng)建對象

JHSDB工具:查看內(nèi)存

內(nèi)存虛擬化

堆溢出
棧溢出
方法區(qū)溢出
直接內(nèi)存溢出

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容