JVM的運行時常量池存儲對象還是引用問題


JVM的運行時常量池存儲對象還是引用問題

運行時常量池介紹

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

image-20210904151246196

image-20210904152401298

版本演變

在jdk演變中,運行時常量池伴隨着方法區的位置經歷了一些演變:

JDK1.7之前運⾏時常量池邏輯包含字符串常量池存放在⽅法區, 此時hotspot虛擬機對⽅法區的實現為永久代。

注:永久代是hotspot虛擬機對jvm規范中方法區的具體實現,具體來說就是方法去是一個概念,永久代是hotspot在1.8之前的一個實現,放在堆空間中,在1.8變成了元空間,元空間放在直接內存中。

JDK1.7把字符串常量池拿出來放在了堆中,但是其他的仍在方法區(永久代)
JDK1.8 hotspot移除了永久代⽤元空間(Metaspace)取⽽代之, 這時候字符串常量池還
在堆, 運⾏時常量池還在⽅法區。

結論

jdk1.8版本的字符串常量池存放的是字符串對象和字符串常量池,元空間的常量池尋訪的是引用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM