JVM運行時數據區與JVM堆內存模型小結
阿新 • • 發佈:2017-08-24
heap 組成 space 是什麽 永久 nat jvm內存 -- 又是
前提
JVM運行時數據區和JVM內存模型是兩回事,JVM內存模型指的是JVM堆內存模型。
那JVM運行時數據區又是什麽?
它包括:程序計數器、虛擬機棧、本地方法棧、方法區、堆。
來看看它們都是幹嘛的
程序計數器:保存當前線程執行的指令的地址(大意如此)。
虛擬機棧:由棧幀組成,而每個棧幀又包括局部變量表、操作數棧、動態連接(調用其他方法)、出口(被調用時返回值) -- 每個棧幀就代表了一個方法的執行。
本地方法棧:類似虛擬機棧,只不過方法改成了native方法。
方法區:保存了類的各種信息、類的常量、類的靜態變量 -- 請註意,不包括類的普通變量!
堆:各種對象所在。
前三者都是線程內的資源,所以不會存在同步問題!
其實按照咕泡學院海天老師的說法是,程序計數器、虛擬機棧、本地方法棧 這三個對應了馮諾依曼結構中的運算器、控制器;而方法區、堆則對應了馮諾依曼結構中的IO和存儲器。耳目一新!
再來看看JVM堆內存模型
我們常說的新生代、老年代、永久代(JDK1.8之後變成了MetaSpace),就是JVM堆內存模型!
最後,很多書上(包括教科書)都把堆(heap)叫做堆棧,而把棧(stack)叫做棧,個人覺得這是一種很扯淡的叫法。
待續。
JVM運行時數據區與JVM堆內存模型小結