jdk features descargar java string jvm constants

java - features - String pool vs Constant pool



openjdk (2)

Veamos el siguiente fragmento de código:

String s1 = "Hello"; String s2 = "Hello";

Ambas variables se refieren al mismo objeto debido a la internación. Dado que las cadenas son inmutables, solo se crea un objeto y ambos se refieren al mismo objeto.

Una constant pool también es algo que contiene todas las constantes (entero, cadena, etc.) que se declaran en una clase. Es específico para cada clase.

System.out.println("Hello"); // I believe this Hello is different from above.

Preguntas:

  1. ¿Se refiere el grupo de cadenas al grupo de un objeto de cadena constante en el grupo de constantes?
  2. En caso afirmativo, ¿ el conjunto de cadenas es común en toda la aplicación o es específico para una clase?

Mis preguntas son

  1. ¿El conjunto de cadenas se refiere al conjunto de objetos de cadena constante en el conjunto de constantes?

No.

"Agrupación constante" se refiere a una colección de bytes especialmente formateada en un archivo de clase que tiene significado para el cargador de clases de Java. Las "cadenas" en él están serialized , no son objetos Java. También hay muchos tipos de constantes, no solo cadenas.

Ver Capítulo 4.4 la mesa de billar constante.

Las instrucciones de la Máquina Virtual Java no se basan en el diseño en tiempo de ejecución de las clases, interfaces, instancias de clase o matrices. En cambio, las instrucciones se refieren a información simbólica en la tabla constant_pool .

En contraste, el "grupo de cadenas" se usa en el tiempo de ejecución (no solo durante la carga de clases), contiene solo cadenas , y las "cadenas" en el grupo de cadenas son objetos java. El "grupo de cadenas" es un mapa débil seguro para subprocesos de las instancias java.lang.String instancias java.lang.String utilizan para internar cadenas.

Capítulo 3.10.5. Literales de cuerdas dice

Un literal de cadena es una referencia a una instancia de la clase String (§4.3.1, §4.3.3).

Además, 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 valores de expresiones constantes (§15.28) - se "internan" para compartir instancias únicas, utilizando el método String.intern .


Solo hay un conjunto de cadenas, y todos los literales de cadenas se internan automáticamente.
Además, hay otros grupos para autoboxing y tal.

La reserva constante es donde esos literales se ponen para la clase.