天天看點

解析Java記憶體區域

根據《Java虛拟機規範(第2版)》的規定,Java虛拟機所管理的記憶體将會包括以下幾個運作時資料區域。如下圖所示。

1.程式計數器

它主要有以下三個特點:

①程式計數器是一塊較小的記憶體空間,它的作用可以看作是目前線程所執行的位元組碼的行号訓示器;

②線程私有(每一個線程都有自己的程式計數器);

③如果線程執行的是Java方法,計數器記錄的是正在執行的虛拟機位元組碼指令的位址,如果是本地方法,則計數器的值為空(Undefined);

2.Java虛拟機棧

它主要有以下幾個特點:

①線程私有;

②描述了Java方法執行的記憶體模型:每個方法執行的時候,會同時建立一個棧幀(Stack

Frame)用于存儲局部變量、操作棧、動态連接配接、方法出口等消息。

③每個方法從被調用到執行完成的過程,就對應着一個棧幀在虛拟機棧中從入棧到出棧的過程

3.本地方法棧

②功能與虛拟機棧類似,與虛拟機棧不同的是虛拟機棧為虛拟機執行Java方法服務,而本地方法棧是為虛拟機使用到的本地方法(Native方法)服務。

4.Java堆

①線程共享;

②存放對象執行個體;

③垃圾收集器的主要區域,有時候被叫做“GC堆”;

5.方法區

②用于存儲已經被虛拟機加載的類資訊、常量、靜态變量、即時編譯器編譯後的代碼等資料;

繼續閱讀