Is there any way to check, currently which Strings are there in the String pool.
Can I programmatically list all Strings exist in pool?
or
Any IDE already have this kind of plugins ?
Is there any way to check, currently which Strings are there in the String pool.
Can I programmatically list all Strings exist in pool?
or
Any IDE already have this kind of plugins ?
You are not able to access the string pool from Java code, at least not in the HotSpot implementation of Java VM.
String pool in Java is implemented using string interning. According to JLS §3.10.5:
a string literal always refers to the same instance of class
String
. This is because string literals - or, more generally, strings that are the values of constant expressions (§15.28) - are "interned" so as to share unique instances, using the methodString.intern
.
And according to JLS §15.28:
Compile-time constant expressions of type
String
are always "interned" so as to share unique instances, using the methodString.intern
.
String.intern
is a native method, as we can see in its declaration in OpenJDK:
public native String intern();
The native code for this method calls JVM_InternString
function.
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
That is, string interning is implemented using native code, and there's no Java API to access the string pool directly. You may, however, be able to write a native method yourself for this purpose.