JVM有哪些分區?(解釋詳細 通俗易懂)


JVM的分區可以分為兩種:線程私有的內存區線程共享的內存區

 

一.JVM中線程私有的內存區:

 

1.程序計數器:當前線程所執行的字節碼行號計數指示器,是線程私有的,即每個線程都有自己的程序計數器,需要注意的是,如果當前JVM執行的是Native代碼(即非JAVA代碼),那么程序計數器值為空

 

2.JAVA虛擬機棧:存放棧幀的地方,每個JAVA方法執行的時候會創建一個棧幀,該棧幀保持的是該方法的相關信息(局部變量表等),棧幀隨着方法的執行和跳出進棧和出棧,JAVA虛擬機棧是線程私有的,即每個線程都要自己的JAVA虛擬機棧

 

3.本地方法棧:類似JAVA虛擬機棧,但是JAVA虛擬機棧是為JAVA方法提供服務的,而本地方法棧是為非JAVA方法提供服務的(Native方法)

 

二.JVM中線程共享的內存區:

 

1.堆:存放對象實例的地方,從GC(垃圾回收)的角度講,又分為新生代和老年代,屬於線程共享的內存區域

 

2.方法區:儲存已經被JVM加載的類信息,比如常量,靜態變量,類的名稱,方法信息等等,方法區中還包含運行時常量池和常量池,區別是運行時常量池是動態的,因為JAVA語言並不要求常量一定只能在編譯期間生成,運行期間也有可能產生新的常量,這些常量就被放入運行常量池,這里所說的常量包括包裝類和String類

 

個人覺得從是否線程共享的角度看待JVM中的內存區更容易理解!

另外堆和棧的解析可以參考這個:https://www.cnblogs.com/yinbiao/p/8073999.html

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM