java string string-pool

java - ¿Cómo verificar los contenidos de String Pool?



pool java (1)

No puede acceder al grupo de cadenas desde el código Java, al menos no en la implementación HotSpot de Java VM.

El conjunto de cadenas en Java se implementa mediante el internado de cadenas . Según JLS §3.10.5 :

un literal de cadena siempre se refiere a la misma instancia de la clase String . Esto se debe a que los literales de cadena (o, más generalmente, las cadenas que son los valores de las expresiones constantes (§15.28)) están "internados" para compartir instancias únicas, utilizando el método String.intern .

Y según JLS §15.28 :

Las expresiones constantes en tiempo de compilación de tipo String siempre se "internan" para compartir instancias únicas, utilizando el método String.intern .

String.intern es un método nativo, como podemos ver en su declaración en OpenJDK :

public native String intern();

El código nativo para este método llama a la función 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

Es decir, la internación de cadenas se implementa utilizando código nativo, y no hay una API de Java para acceder directamente al conjunto de cadenas. Sin embargo, puedes escribir un método nativo para este propósito.

¿Hay alguna forma de verificar, actualmente, qué cadenas hay en el conjunto de cadenas?

¿Puedo listar programáticamente todas las cadenas existentes en el grupo?

o

¿Algún IDE ya tiene este tipo de plugins?