當前位置:編程學習大全網 - 編程語言 - 詳解JVM內存結構組成

詳解JVM內存結構組成

 妳對JVM內存結構是否了解 這裏和大家分享壹下 JVM內存結構主要包括兩個子系統和兩個組件 這兩個組件分別是Runtimedataarea(運行時數據區域)組件和Nativeinterface(本地接口)組件

  JVM內存結構

 近期看了看Java內存泄露的壹些案例 跟原來的幾個哥們討論了壹下 深入研究發現JVM裏面還是有不少以前不知道的細節 這裏稍微剖析壹下 先看壹看JVM內部結構——

 

 如圖所示 JVM內存結構主要包括兩個子系統和兩個組件 兩個子系統分別是Classloader子系統和Executionengine(執行引擎)子系統 兩個組件分別是Runtimedataarea(運行時數據區域)組件和Nativeinterface(本地接口)組件

  Classloader子系統的作用

 根據給定的全限定名類名(如java lang Object)來裝載class文件的內容到Runtimedataarea中的methodarea(方法區域) Java程序員可以extendsjava lang ClassLoader類來寫自己的Classloader

  Executionengine子系統的作用

 執行classes中的指令 任何JVMspecification實現(JDK)的核心都是Executionengine 不同的JDK例如Sun的JDK和IBM的JDK好壞主要就取決於他們各自實現的Executionengine的好壞

  Nativeinterface組件

 與nativelibraries交互 是其它編程語言交互的接口 當調用native方法的時候 就進入了壹個全新的並且不再受虛擬機限制的世界 所以也很容易出現JVM無法控制的nativeheapOutOfMemory

  RuntimeDataArea組件

 這就是我們常說的JVM的內存了 它主要分為五個部分——

  Heap(堆) 壹個Java虛擬實例中只存在壹個堆空間

  MethodArea(方法區域) 被裝載的class的信息存儲在Methodarea的內存中 當虛擬機裝載某個類型時 它使用類裝載器定位相應的class文件 然後讀入這個class文件內容並把它傳輸到虛擬機中

  JavaStack(java的棧) 虛擬機只會直接對Javastack執行兩種操作 以幀為單位的壓棧或出棧

  ProgramCounter(程序計數器) 每壹個線程都有它自己的PC寄存器 也是該線程啟動時創建的 PC寄存器的內容總是指向下壹條將被執行指令的餓地址 這裏的地址可以是壹個本地指針 也可以是在方法區中相對應於該方法起始指令的偏移量

  Nativemethodstack(本地方法棧) 保存native方法進入區域的地址

lishixinzhi/Article/program/Java/hx/201311/26038

  • 上一篇:如何用sw畫鈑金基座?用SolIDWorks畫的帶螺栓、螺母的鈑金基座!
  • 下一篇:表示自己很無聊的文案
  • copyright 2024編程學習大全網