上週在看常量池相關內容的時候發現了這個問題,JDK7之後字符串常量池移到了堆中,常量池中保存字面量和字符串引用,基本上全部的文章都這麼說過吧。可是在看後續內容的時候發現還有一個StringTable,這是一個hashtable相似的表保存在本地內存中,他存的也是字符串的引用,當直接定義字符串String a="b"
時,就會保存這個字符串對象在堆上的引用,之後後面用的時候直接拿引用便可,同時String。intern()
方法也會將該字符串的引用保存進去。code
因此就是這個產生了疑惑,對於一個字符串是否被使用過的判斷依據能夠經過這個StringTable來查找是否存在其引用,那麼堆上的字符串常量池是作什麼用的,他裏面存的字面量和引用是在何時用的,由於這二者一個在堆上,一個在本地內存。難不成字符串常量池只是一個代稱,指代堆上全部字符串?但願有知道的能夠幫忙解答一下,不勝感激。 cdn