Recientemente he leído acerca de todos los argumentos de JVM disponibles en JRE 6 [Java VM Options] y vi esta:JVM -XX: + argumento StringCache?
-XX: + StringCache: Permite el almacenamiento en caché de cadenas comúnmente asignados.
ahora estaba siempre bajo la impresión de que Java mantuvo un grupo de internados (palabra correcta?) Cuerdas y cuando se hace algo así como la concatenación de cadenas con literales que no estaba creando nuevos objetos, pero tirando de ellos de esta piscina. ¿Alguien ha usado alguna vez este argumento, o puede explicar por qué sería necesario?
EDIT: Intenté ejecutar un punto de referencia, para ver si este argumento tenía algún efecto y no fue capaz de lograr que Sun JVM lo reconociera. Esto fue con:
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode,
sharing)
Así que no estoy seguro de si este argumento funciona en absoluto.
creo que la mayoría de las operaciones de cadena no utilizan la internación. La JVM utiliza bastante el interrogatorio para almacenar valores de cadena de los archivos de clase y evitar el consumo excesivo de memoria debido a duplicados. – akarnokd
Gran pregunta. Los documentos del sol no están muy claros aquí. Sin embargo, los documentos sobre el internamiento son claros de que solo operan bajo circunstancias específicas (literales de cadena) por lo que quizás el argumento JVM aplique este comportamiento en un conjunto más amplio de circunstancias. –
No puedo encontrar esta opción en el código fuente de OpenJDK. ¿Qué supones que significa? –