1. 程式人生 > >JVM系列1:Java內存區域

JVM系列1:Java內存區域

left spl 內容 發生 直接 pla nbsp 包含 可能

  JVM系列主要分享自己都虛擬機的理解,我自學時的知識框架多來源於《深入理解Java虛擬機_JVM高級特性與最佳實踐》這本書,感興趣的朋友可直接去閱讀這本書。

  本系列暫定有3部分,它們是學習的重點內容:Java內存區域、垃圾收集、類加載機制。

正文

  該篇隨筆主要分享下我都Java內存區域的理解,以下是我學習的結果,思維導圖。技術分享圖片

  Java內存區域如下:

技術分享圖片

  分為共享區域:方法區、堆,私有區域:虛擬機棧、本地方法棧、程序計數器。他們各自職責如下

  程序計數器:一種上下文指示器,幫助分支、循環、跳轉、異常等功能

  虛擬機棧:是方法執行內存模型。執行一個方法會創建棧幀存儲局部變量表、操作數棧、動態鏈接、方法出口等。其中局部變量表存放了編譯期可知的各種基本數據、對象引用類型。

  本地方法棧:為Native方法提供的棧

  堆:一般用於存放對象實例,對象實例數據包括對象頭,對象體,填充。對象頭包含了對象重要信息如:HashCode、GC年齡、鎖狀態以及指向類對象的指針。

  方法區:存儲已被加載的類信息、常量、靜態變量。

  常見異常:OOM:內存溢出,在堆、棧、方法區都可能發生該異常。

        StackOverflow:棧溢出異常

JVM系列1:Java內存區域