求解一个问题,字符串常量池和StringTable是一个东西吗

495 阅读1分钟

上周在看常量池相关内容的时候发现了这个问题,JDK7以后字符串常量池移到了堆中,常量池中保存字面量和字符串引用,基本上所有的文章都这么说过吧。但是在看后续内容的时候发现还有一个StringTable,这是一个hashtable类似的表保存在本地内存中,他存的也是字符串的引用,当直接定义字符串String a="b"时,就会保存这个字符串对象在堆上的引用,以后后面用的时候直接拿引用即可,同时String。intern()方法也会将该字符串的引用保存进去。

所以就是这个产生了疑惑,对于一个字符串是否被使用过的判断依据可以通过这个StringTable来查找是否存在其引用,那么堆上的字符串常量池是做什么用的,他里面存的字面量和引用是在什么时候用的,因为这两者一个在堆上,一个在本地内存。难不成字符串常量池只是一个代称,指代堆上所有字符串?希望有知道的可以帮忙解答一下,不胜感激。