Pena de rendimiento de String.intern ()

Mucha gente habla sobre las ventajas de rendimiento de String.intern (), pero en realidad estoy más interesado en cuál puede ser la penalización de rendimiento.

Mis principales preocupaciones son:

Costo de busqueda: El tiempo que toma intern () para averiguar si la cadena internable existe en el conjunto de constantes. ¿Cómo se escala el costo con el número de cadenas en ese grupo?Sincronización: obviamente la agrupación constante es compartida por toda la JVM. ¿Cómo se comporta ese grupo cuando se llama a intern () una y otra vez desde varios subprocesos? ¿Cuánto bloqueo realiza? ¿Cómo se escala el desempeño con la contención?

Me preocupan todas estas cosas porque actualmente estoy trabajando en una aplicación financiera que tiene un problema de usar demasiada memoria debido a cadenas duplicadas. Básicamente, algunas cadenas parecen valores enumerados y solo pueden tener un número limitado de valores potenciales (como los nombres de moneda ("USD", "EUR")) en más de un millón de copias. String.intern () parece una obviedad en este caso, pero me preocupa la sobrecarga de sincronización de llamar a intern () cada vez que almaceno una moneda en algún lugar.

Además de eso, algunos otros tipos de cadenas pueden tener millones de valores diferentes, pero aún así tienen decenas de miles de copias de cada una (como los códigos ISIN). Para estos, me preocupa que internar un millón de cadenas básicamente ralentizaría el método intern () tanto como para atascar mi aplicación.

Respuestas a la pregunta(4)

Su respuesta a la pregunta