上周在看常量池相关内容的时候发现了这个问题,JDK7之后字符串常量池移到了堆中,常量池中保存字面量和字符串引用,基本上全部的文章都这么说过吧。可是在看后续内容的时候发现还有一个StringTable,这是一个hashtable相似的表保存在本地内存中,他存的也是字符串的引用,当直接定义字符串String a="b"
时,就会保存这个字符串对象在堆上的引用,之后后面用的时候直接拿引用便可,同时String。intern()
方法也会将该字符串的引用保存进去。code
因此就是这个产生了疑惑,对于一个字符串是否被使用过的判断依据能够经过这个StringTable来查找是否存在其引用,那么堆上的字符串常量池是作什么用的,他里面存的字面量和引用是在何时用的,由于这二者一个在堆上,一个在本地内存。难不成字符串常量池只是一个代称,指代堆上全部字符串?但愿有知道的能够帮忙解答一下,不胜感激。 cdn