JVM內存區域劃分

學習Java不可避免的要學習Java虛擬機,也就是JVM,Java虛擬機規範裏面規定了程序運行期間會使用到的運行時數據區,這也是JVM的內存區域劃分的模型,應該能夠這麼理解吧。數組

這其中有一些是隨着虛擬機的啓動和退出而建立和銷燬的,這些區域是線程共享的,另外有一些是跟各個線程綁定的,隨着線程的開始和結束而建立和銷燬,咱們能夠稱這些區域是線程私有的。bash

根據《Java虛擬機規範Java SE 7版》和《Java虛擬機規範Java SE 8版》的規定,咱們能夠劃分出以下幾個運行時數據區,以下圖所示: 微信

Java堆

在Java虛擬機中,堆是可供各個線程共享的運行時內存區域,也是供全部類實例和數組對象分配內存的區域。這塊區域隨着虛擬機的啓動而建立,它的惟一使命就是存放對象實例,這塊區域也是GC主要關注的地方。函數

下面的就是個人筆記本上的JVM堆的劃分狀況,能夠看到分爲新生代、老年代和永久代,新生代裏面有能夠分爲Eden Space、From Survivor Space和To Survivor Space。學習

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 17301504 (16.5MB)
   used     = 2483088 (2.3680572509765625MB)
   free     = 14818416 (14.131942749023438MB)
   14.351862127130682% used
From Space:
   capacity = 2621440 (2.5MB)
   used     = 2615312 (2.4941558837890625MB)
   free     = 6128 (0.0058441162109375MB)
   99.7662353515625% used
To Space:
   capacity = 6291456 (6.0MB)
   used     = 0 (0.0MB)
   free     = 6291456 (6.0MB)
   0.0% used
PS Old Generation
   capacity = 44564480 (42.5MB)
   used     = 13316368 (12.699478149414062MB)
   free     = 31248112 (29.800521850585938MB)
   29.88112505744485% used
PS Perm Generation
   capacity = 22020096 (21.0MB)
   used     = 14907008 (14.2164306640625MB)
   free     = 7113088 (6.7835693359375MB)
   67.6972888764881% used
複製代碼

根據虛擬機規範的規定,Java堆能夠是固定的大小也能夠是按照需求動態擴展的,並且不須要保證是連續的。spa

存放內容: 全部的對象實例和數組。線程

方法區

方法區是一個線程共享的區域,它用於存儲已被虛擬機加載的類信息、常量、靜態變量。方法區是堆的邏輯組成部分,Hotspot用永久代實現了方法區。 方法區還包含運行時常量池(JDK1.7之後移到堆中),用於存放編譯時生成的各類字面量和符號引用,可是不要求常量必定是在編譯時期產生的,運行期間也能夠將新的常量放入池中,好比String的intern()方法即是利用了這一特性。code

存放內容: 類的結構信息,如類的字段、方法、接口、構造函數,還有運行時常量池等。cdn

程序計數寄存器

這塊區域是每一個線程獨立擁有的,也就是線程私有的,咱們能夠把它看做是當前線程所執行的字節碼的行號指示器。對象

這塊區域時虛擬機規範裏面惟一一個沒有規定任何OutOfMemoryError狀況的區域。

存放內容: 若是線程執行的是一個Java方法,那麼寄存器裏面記錄的就是正在執行的虛擬機字節碼指令的地址,若是線程執行的是一個native方法,那麼寄存器記錄的值爲undefined。

虛擬機棧

虛擬機棧也是線程私有的內存區域。每一個方法在執行的時候都會建立一個棧幀用於存儲局部變量表、操做數棧、方法出口等信息,每個方法從調用到執行完成就是一個棧幀入棧和出棧的過程。

局部變量表存放了編譯時期可知的各類基本數據類型、對象引用和指向了一條字節碼指令的地址。

存放內容: 局部變量表、操做數棧、方法出口等信息。

本地方法棧

和虛擬機棧相似,存儲Native方法的相關信息。

存放內容: 局部變量表、操做數棧、方法出口等信息。

微信掃描下方二維碼,關注公衆號,查看獲取更多文章

二維碼
相關文章
相關標籤/搜索