JVM的常量池

2021-08-22 08:45:27 字數 563 閱讀 8286

指的是在編譯期被確定

並被儲存在已編譯的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被載入後,存於記憶體中的執行時常量池,那麼,...