深入理解JVM之--運行時數據區域

運行時數據區域

        JVM在執行Java程序的過程中會把說管理的內存分爲不同的數據區域。有的區域是在虛擬機啓動而創建,有的區域則是跟隨線程的啓動和結束而建立銷燬。如下圖,在JVM GC調優中通常都是堆、方法區。

 

1.程序計數器(Pc Register)

每個線程都有自己的Pc Register,它的作用是當前線程所執行的指令地址。

2.Java虛擬器棧(statck)

Java虛擬機棧是線程私有的,每個線程都有自己的虛擬機棧,它的生命週期與線程相同。虛擬機棧描述的是Java方法執行的內存模型:每個方法被執行時,都會創建一個棧幀,用於存儲局部變量,操作數棧,動態鏈接,方法出口等信息。每一個方法從調用直至執行完成的過程,就對應着一個棧幀在虛擬機棧中入棧到出棧的過程。後續會詳細講一下虛擬機棧中的操作數棧。

3.堆(heap)

Java堆是Jvm內存管理中內存最大的一塊,堆是所有線程共享的內存區域,它用於存放所有實例對象,也是GC回收的主要對象,後續會講到GC。

4.方法區(Method Area)

 方法區也是所有線程共享的內存區域,它主要存放被虛擬機加載的類信息,常量,靜態變量等。

5.本地方法棧

與虛擬機棧類似,不過它爲使用Native方法服務。

6.運行時常量池

它屬於方法區中的一部分。在Class常量池中,用於存放編譯期生成的字面量和符號引用,在類加載後,這部分將會存放到運行時常量池中。運行時常量池一個重要特徵是具有動態性,在運行期間也可能將有新的常量放入到池中(如String類的intern()方法)。後續會講到Class常量池,String常量池,運行時常量池的區別。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章