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étodoString.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étodoString.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?