1. 程式人生 > >JVM運行時數據區與JVM堆內存模型小結

JVM運行時數據區與JVM堆內存模型小結

heap 組成 space 是什麽 永久 nat jvm內存 -- 又是

前提

JVM運行時數據區和JVM內存模型是兩回事,JVM內存模型指的是JVM堆內存模型。


那JVM運行時數據區又是什麽?

它包括:程序計數器、虛擬機棧、本地方法棧、方法區、堆。


來看看它們都是幹嘛的

程序計數器:保存當前線程執行的指令的地址(大意如此)。

虛擬機棧:由棧幀組成,而每個棧幀又包括局部變量表操作數棧動態連接(調用其他方法)、出口(被調用時返回值) -- 每個棧幀就代表了一個方法的執行。

本地方法棧:類似虛擬機棧,只不過方法改成了native方法。

方法區:保存了類的各種信息、類的常量、類的靜態變量 -- 請註意,不包括類的普通變量!

:各種對象所在。


前三者都是線程內的資源,所以不會存在同步問題!

其實按照咕泡學院海天老師的說法是,程序計數器、虛擬機棧、本地方法棧 這三個對應了馮諾依曼結構中的運算器、控制器;而方法區、堆則對應了馮諾依曼結構中的IO和存儲器。耳目一新!


再來看看JVM堆內存模型

我們常說的新生代、老年代、永久代(JDK1.8之後變成了MetaSpace),就是JVM堆內存模型!






最後,很多書上(包括教科書)都把堆(heap)叫做堆棧,而把棧(stack)叫做棧,個人覺得這是一種很扯淡的叫法。


待續。

JVM運行時數據區與JVM堆內存模型小結