JVM簡介(一)——內存模型


關於JVM,網上文章鋪天蓋地。有深有淺,有對有錯。這里從我關心的角度,介紹JVM部分原理。或者說很多都是hotspot的實現原理。
 
一。JVM中內存情況
如下圖。分成三部分:
(1) 線程棧——每個線程都有對應的棧區,調用一個方法,會壓入一個方法幀。
(2) ——用於對象的空間的分配。類的實例都是在堆內存上進行分配的。 下文暫稱為JAVA堆
(3) 方法區——方法區底層存儲也是在計算機堆內存上。但是為了與JVM給對象實例分配內存的堆進行區分,才將方法區稱為非堆(non-heap)
 
換句話說,JAVA堆與方法區都在計算機堆內存上。只不過JAVA堆是留給用戶程序用的,方法區是JVM自己用的
 
二。各區存放的內容
方法區存放的是:class的相關信息、靜態變量、常量池、方法本身

棧存放的是:一個個棧幀(Stack Frame),調用一個方法會壓入一個棧幀,內容是該方法中的基本類型變量、對象變量的引用、中間變量、形參和方法有關的操作,如出口等

堆存放的是:實例化的對象

 

運行過程中JVM內存中的情況。

方法B相關棧被壓入棧中,其中有對對象X的引用指向了堆中的對象X,其中是存放了對象的成員變量等該對象能夠獲取到方法區中該類的信息,包含了靜態變量、方法等

JVM簡介(一)——內存模型


免責聲明!

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



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