指的是在編譯期被確定
並被儲存在已編譯的class檔案中的一些資料。
基本型別
物件型
符號引用
除了包含**中所定義的各種基本型別
比如,int、long等,和物件型,比如,string及陣列,的常量值,比如final修飾外
還包含一些以文字形式出現的符號引用,
1、類和介面的全限定名
2、欄位的名稱和描述符
3、方法的名稱和描述符
虛擬機器必須為每個被裝載的型別維護乙個常量池
常量池就是該型別所用到常量的乙個有序集合
包括直接常量比如,string,integer等,和其他型別,欄位和方法的符號引用
對於string常量,它的值是在常量池中的。
而jvm中的常量池在記憶體當中,是以表的形式存在的
對於string型別,有一張固定長度的constant_string_info表
用來儲存文字字串值
注意 該錶只儲存文字字串值,不儲存符號引用。
在程式執行的時候,常量池會儲存在methodarea,而不是堆中
JVM常量池分析
clas檔案中除了有類的版本 欄位等描述資訊外,還有常量池表 constant pool table 用於存放編譯期生成的各種字面量和符號引用,這部分內容在類載入後會存放在方法區中的執行時常量池。執行時常量池是在方法區中,即jdk1.8中的元空間。jvm將類載入到記憶體中後,會將class常量池中的...
JVM字串常量池
stringtable intern 建立了幾個物件?string s newstring abc 2個。乙個在堆中,乙個在字串常量池中。string s1 newstring abc string s2 newstring abc 3個。字串常量池只會儲存乙份內容相同的字串。兩個在堆中,乙個在字串...
JVM 常量池 執行時常量池 字串常量池的理解
補充 答 常量池有class檔案的常量池 在檔案中 執行時常量池 記憶體中,由class檔案常量池得來 字串常量池是大的全域性字串快取池,公用。問 是的,那我這裡有點疑惑,就是這個helloword在編譯期的時候,是存於class的常量池中的,在class被載入後,存於記憶體中的執行時常量池,那麼,...