1. 程式人生 > >Java基礎——JVM內存結構

Java基礎——JVM內存結構

perm pre 永久代 msi 字節碼 strong 講解 images 調用

一、內存結構圖

  技術分享

  程序計數器

    保存著當前線程執行的虛擬機字節碼指令的內存地址,使得保證線程切換回來後,還能恢復到原先狀態。(本地native豐富則計數器為空)

  虛擬機棧(JVM棧)  

    每創建一個線程時就會對應創建一個Java棧,所以Java棧也是"線程私有"的內存區域,這個棧中又會對應包含多個棧幀,每調用一個方法時就會往棧中創建並壓入一個棧幀,棧幀是用來存儲方法數據和部分過程結果的數據結構,每一個方法從調用到最終返回結果的過程,就對應一個棧幀從入棧到出棧的過程。

    我們平時說的堆棧堆棧,棧就是指代的這個JVM棧,堆在下文講解。

  本地方法棧

    與虛擬機棧類似,為本地方法服務。

  方法區

    用於存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。

    方法區中還存在著常量池,常量池包含著一些常量和符號引用(加載類的連接階段中的解析過程會將符號引用轉換為直接引用)。

  

    堆(heap)是存儲java實例或者對象的地方,是GC的主要區域,同樣是線程共享的內存區域。(進一步可以細分為新生代和老年代

二、控制參數

-Xms設置堆的最小空間大小。

-Xmx設置堆的最大空間大小。

-XX:NewSize設置新生代最小空間大小。

-XX:MaxNewSize設置新生代最大空間大小。

-XX:PermSize設置永久代最小空間大小。

-XX:MaxPermSize設置永久代最大空間大小。 -Xss設置每個線程的堆棧大小。

Java基礎——JVM內存結構