如何检查字符串池内容?
有没有办法检查,目前字符串池中有哪些字符串。
我可以以编程方式列出池中存在的所有字符串吗?
要么
任何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可以直接访问字符串池。 但是,您可以为此目的自行编写本机方法。