Como verificar o conteúdo do pool de strings?

Existe alguma maneira de verificar, atualmente quais Strings estão lá no pool String.

Posso listar programaticamente todas as strings existentes no pool?

ou

Qualquer IDE já tem esse tipo de plugins?

Você não pode acessar o pool de strings a partir do código Java, pelo menos não na implementação do HotSpot do Java VM.

O conjunto de strings em Java é implementado usando a internação de strings . De acordo com o JLS §3.10.5 :

uma string literal sempre se refere à mesma instância da class String . Isso ocorre porque literais de string – ou, mais geralmente, strings que são os valores de expressões constantes (§15.28) – são “internados” para compartilhar instâncias exclusivas, usando o método String.intern .

E de acordo com o JLS §15.28 :

As expressões de constante de tempo de compilation do tipo String sempre são “internadas” para compartilhar instâncias exclusivas, usando o método String.intern .

String.intern é um método nativo, como podemos ver em sua declaração no OpenJDK :

 public native String intern(); 

O código nativo para este método chama a function 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 

Ou seja, a internação de strings é implementada usando código nativo e não há API Java para acessar diretamente o conjunto de strings. Você pode, no entanto, ser capaz de escrever um método nativo para esse propósito.