Недавно я читал обо всех аргументах JVM, доступных в JRE 6 [Параметры виртуальной машины Java] и увидел следующее:
-XX: + StringCache: позволяет кэшировать общеупотребительные строки.
Теперь у меня всегда создавалось впечатление, что Java хранит пул интернированных (правильное слово?) Strings и при выполнении чего-то вроде конкатенации String с литералами он не создает новые объекты, а вытаскивает их из этого пула. Кто-нибудь когда-либо использовал этот аргумент или может объяснить, зачем он нужен?
РЕДАКТИРОВАТЬ: Я попытался запустить бенчмарк, чтобы проверить, не повлиял ли этот аргумент, и не смог заставить 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)
Поэтому я не уверен, что этот аргумент работает вообще.