java中的常量池分3種
1.class文件常量池(靜態常量池)
2運行時常量池
3.字符串常量池
class文件常量池:存儲區域是在堆中,編譯時產生對應的class文件,主要包含字面量和符號引用
運行時常量池:存在與本地內存的元空間中,JVM運行時,在類加載完成后,將每個class常量池中的符號引用轉換為直接引用,與全量池中保持一致
字符串常量池:類在加載完成,經過驗證,准備之后在堆中生成字符串對象實例,然后將該字符串對象實例的引用只存儲到sting pool中,string pool是一個StringTable類,是哈希表結果,里面存儲的是字符串引用,具體的實例對象存儲在堆中,這個stringtable表在每個hotspot中的實例只有一份,被所有類共享。