JVM的運行時常量池存儲對象還是引用問題
運行時常量池介紹
運行時常量池是JVM中方法區的一個區域,用於存放常量編譯期⽣成的各種字⾯量和符號引⽤。運行時常量池位置如下。


版本演變
在jdk演變中,運行時常量池伴隨着方法區的位置經歷了一些演變:
JDK1.7之前運⾏時常量池邏輯包含字符串常量池存放在⽅法區, 此時hotspot虛擬機對⽅法區的實現為永久代。
注:永久代是hotspot虛擬機對jvm規范中方法區的具體實現,具體來說就是方法去是一個概念,永久代是hotspot在1.8之前的一個實現,放在堆空間中,在1.8變成了元空間,元空間放在直接內存中。
JDK1.7把字符串常量池拿出來放在了堆中,但是其他的仍在方法區(永久代)
JDK1.8 hotspot移除了永久代⽤元空間(Metaspace)取⽽代之, 這時候字符串常量池還
在堆, 運⾏時常量池還在⽅法區。
結論
jdk1.8版本的字符串常量池存放的是字符串對象和字符串常量池,元空間的常量池尋訪的是引用。
