Я недавно читал о всех аргументов JVM доступны в JRE 6 [Java VM Options] и увидел это:JVM -XX: + аргумент StringCache?
-XX: + StringCache: Включает кэширование часто выделенных строк.
Теперь я всегда был под впечатлением, что Java хранится пул интернированы (правильное слово?) Струны и когда делать что-то вроде Объединение строк с литералы это не создание новых объектов, но и вытаскивать их из этого пула. Кто-нибудь когда-либо использовал этот аргумент или мог бы объяснить, зачем он нужен?
EDIT: Я попытался запустить бенчмарк, чтобы увидеть, был ли этот аргумент каким-либо образом, и не смог заставить Sun JVM его распознать. Это было связано с:
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)
Так что я не уверен, что этот аргумент вообще работает.
Я думаю, что большинство операций со строками не использовать интернирование. Интернационализация скорее используется JVM для хранения строковых значений из файлов классов и избежания чрезмерного потребления памяти из-за дубликатов. – akarnokd
Большой вопрос. Солнечные документы здесь очень неясны. Тем не менее, документы по интернированию ясны, что он работает только при определенных обстоятельствах (строковые литералы), поэтому, возможно, JVM arg применяет это поведение в более широком контексте. –
Я не могу найти этот параметр в источнике OpenJDK. Как вы думаете, что это значит? –