java - useconcmarksweepgc - JVM-XX:+argumento de StringCache?
jvm parameters list (6)
-XX: -UseStringCache funciona para mí, de forma extraña.
mi versión jdk debería ser 1.6.0_22
Recientemente estuve leyendo sobre todos los argumentos de JVM disponibles en JRE 6 [ Opciones de Java VM ] y vi esto:
-XX: + StringCache: habilita el almacenamiento en caché de cadenas asignadas comúnmente.
Ahora siempre tuve la impresión de que Java mantenía un grupo de cadenas internas (¿palabra correcta?) Y al hacer algo como concatenación de cadenas con literales no estaba creando nuevos objetos, sino que los sacaba de este grupo. ¿Alguna vez alguien ha usado este argumento, o puede explicar por qué sería necesario?
EDITAR: Intenté ejecutar un punto de referencia, para ver si este argumento tuvo algún efecto y no pude lograr que la JVM de Sun 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.
A partir de JDK 8.0, esta opción ha sido eliminada. No me queda claro qué, si es que hay algo, puede usarse como reemplazo.
http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
-XX:+UseStringCache Enables caching of commonly allocated strings. This option was removed from JDK 8 with no replacement.
Creo que cuando se usa con -XX:+AggressiveOpts
, permite que se devuelvan los mismos objetos de String
al crear la String
con el mismo texto (aunque no a través de una new String
, por supuesto). Hay una fase de perfil donde se construye un caché, y después de un punto, el caché se cambia a solo lectura. Obtiene puntuaciones más altas en ciertos puntos de referencia.
No he podido encontrar una única JVM que incluso acepte este supuesto argumento, así que supongo que no hay mucho más que decir.
Tampoco he podido encontrar una JVM que respete esta configuración; Como se comentó, la calidad y, por lo tanto, la utilidad de la documentación sobre los parámetros de JVM es terrible, y sin embargo, por alguna razón, parece ser un área en la que los proveedores de JVM ven espacio para la diferenciación competitiva, aunque ser justo Oracle / Sun es, con mucho, el peor.
De todos modos, si encuentra que su aplicación en un área en particular usa un número pequeño de valores de cadena repetidamente, entonces es definitivamente sensato usar interning, usando el método String.intern () para devolver un valor de grupo interno. Tenga en cuenta que tiene que usar el valor de retorno, esto no es un efecto secundario sobre el valor original.
Al igual que con todos los ajustes de perfil / rendimiento, esto debe hacerse con cuidado con métricas y pruebas. Puede ser significativo (lo ha sido para mí), pero si el conjunto de valores no es pequeño, se degrada el rendimiento y debe tener en cuenta que el conjunto de valores de Cadena se mantiene en Perm Gen, por lo que su uso afectará el uso de la memoria, GC etc.
Yo tampoco pude hacer que lo anterior funcione, pero la última versión de JBB @ spec.org muestra su uso: -XX: -UseStringCache. Tendré que volver a ejecutar los puntos de referencia para ver si hace una diferencia (una aplicación pesada de XML).