1. 程式人生 > 其它 >JVM入門(三)——JVM執行時記憶體

JVM入門(三)——JVM執行時記憶體

在java虛擬機器規範中定了java的記憶體結構包括兩部分:第一是隨著虛擬機器啟動而建立,隨著虛擬機器退出而銷燬,供所有Java程式共享,另一部分是與java執行緒一一對應,隨著執行緒的開始和結束而建立和銷燬。

JVM執行時記憶體結構

以上是Java虛擬機器規範,不同的虛擬機器實現會各有不同,大部分會遵守規範,下面介紹一下使用比較廣泛的虛擬機器Hotspot虛擬機器,對照上面規範,其中與規範不同的是對方法區的實現原理。在jdk1.8之前,方法區是叫永久區(PermGen),永久區在JVM的管理之下,但是到了jdk1.8之後,使用了元資料區(Metaspace)替代了永久區,並且Metaspace也從JVM中移出到了系統記憶體中,當用戶如果不指定Metaspace大小,那麼預設就使用全部系統記憶體。

還有一個概念交java常量池:

java常量池分為:靜態常量池和動態常量池。

靜態常量池:存在於class檔案中,比如經常使用的javap -verbose中,常量池如下:

常量池

在class檔案中常量池名稱是Constant Pool。

執行時常量池:就是在class檔案被載入進了記憶體之後,常量池被轉移到了方法區中,通常說的常量池指的是執行時常量池。靜態常量池存在於java.class檔案中。動態常量池是在java.class檔案載入到虛擬機器時建立的。jdk從1.7之後,執行時常量池已經從永久區轉義到了java堆中,在jdk1.8中,執行時常量池也不在Metaspace中在堆中。