主要分為棧,堆,方法區,程式計數器
1.程式計數器
2.棧(stack)
①虛擬機器棧:每個執行緒獨生成乙個棧,執行緒中每呼叫乙個方法生成乙個棧幀,棧幀依次壓棧
棧幀中存放了每個方法的基本資料變數,物件的引用,操作指令,出口資訊等
②本地方法棧:存放的是native方法(其他語言寫的),其他和虛擬機器棧一樣
可能出現的異常:如果執行緒請求的棧深度大於虛擬機器所允許的最大深度,將丟擲stackoverflowerror(棧溢位異常,單執行緒遞迴容易出現,個人覺得叫棧幀溢位比較好);
如果虛擬機器在擴充套件棧時無法申請到足夠的記憶體空間,則丟擲outofmemoryerror(記憶體溢位異常,多執行緒遞迴的時候容易出現)
棧的優點:a.訪問速度比堆快,僅次於cpu的暫存器
劣勢:只有單個stack的資料可以共享
3.堆(heap)
jvm中最大的一塊記憶體,執行緒共享的,存放物件例項,不被引用的物件,會被gc清理,釋放記憶體
可能出現的異常:outofmemoryerror
4.方法區(method)
和堆一樣被所有執行緒共享,存放了所有class ,static變數,final變數,存放著程式中唯一
還有主記憶體和工作記憶體
jvm記憶體模型 JVM記憶體模型詳情解析
一 結構圖 note string常量池 存在 堆記憶體中 二 各部分詳情解析 1 堆1 老年代 物件年齡 經過一次 monitor gc 年齡加1 15 的會存到 老年代 2 年輕代 3 常量池 string常量 儲存在堆中 2 虛擬機器棧 1 區域性變數表 2 運算元棧 3 動態鏈結 4 方法出...
jvm記憶體模型
補充 可見性 乙個執行緒修改了變數,其他執行緒可以立即知道 保證可見性的方法 volatile synchronized unlock之前,寫變數值回主存 final 一旦初始化完成,其他執行緒就可見 有序性 在本執行緒內,操作都是有序的 重排或 主記憶體同步延時 指令重排 執行緒 內序列語義 寫後...
JVM 記憶體模型
恢復內容開始 學習狂神說筆記 感謝狂神說的分享 私有區一定不會有垃圾 所謂jvm的調優,其實就是在調整共享區中的堆,而且大多數情況下都在調堆 從 來解釋 class test 我們程式中給定的是 public static int a 1 但是在載入過程中的步驟如下 1.載入階段 編譯檔案為 cla...