JVM內存結構大致如下:
其中白色塊部分是線程共享,粉色塊是線程隔離的
堆是JVM中最大的一塊內存空間,絕大部分對象都存在堆內存內,然後堆又可以做以下細分:
虛擬機棧由棧幀
組成,每一次方法調用都會創建一個棧幀,然後去壓棧。當方法返回時,則對應着出棧操作。
棧幀中由包含局部變量表、操作數棧、指向運行時常量池的引用、方法返回地址、動態鏈接。
方法裏的變量在執行時,會從局部變量表或對象實例的字段裏複製變量或常量,放入操作數棧,計算時則從操作數棧裏放入或取走數據。
本地方法棧和虛擬機棧功能類似,虛擬機棧管理JAVA方法
,而本地方法棧管理NATIVE方法
用來記錄各個線程執行的字節碼地址
方法區包含類信息、運行時常量池、字符串常量池和靜態變量