如何检查字符串池内容?

有没有办法检查,目前字符串池中有哪些字符串。

我可以以编程方式列出池中存在的所有字符串吗?

要么

任何IDE都有这种插件吗?

您无法从Java代码访问字符串池,至少不能在Java VM的HotSpot实现中访问。

Java中的字符串池是使用字符串实习来实现的。 根据JLS§3.10.5 :

字符串文字始终引用类String的相同实例。 这是因为字符串文字 – 或者更常见的是作为常量表达式(第15.28节)的值的字符串 – 被“实例化”以便使用String.intern方法共享唯一实例。

根据JLS§15.28 :

String类型的编译时常量表达式总是“实例化”,以便使用String.intern方法共享唯一实例。

String.intern是一个本机方法,我们可以在OpenJDK的声明中看到:

 public native String intern(); 

此方法的本机代码调用JVM_InternString函数。

 JVM_ENTRY(jstring, JVM_InternString(JNIEnv *env, jstring str)) JVMWrapper("JVM_InternString"); JvmtiVMObjectAllocEventCollector oam; if (str == NULL) return NULL; oop string = JNIHandles::resolve_non_null(str); oop result = StringTable::intern(string, CHECK_NULL); return (jstring) JNIHandles::make_local(env, result); JVM_END 

也就是说,字符串实习是使用本机代码实现的,并且没有Java API可以直接访问字符串池。 但是,您可以为此目的自行编写本机方法。