2013-04-09 2 views
8

Профилирование приложения Я понял, что в куче много строк.Конфигурация Java GC для строк

В моей ситуации строки создаются на куче, а не интернированы, и они не являются литералами.

Существуют ли определенные методы настройки GC, которые следует соблюдать, когда количество строк в приложении очень велико.

Я наткнулся на настройки GC -XX: + UseCompressedStrings или -XX + UseStringCache, но не уверен, что это поможет. Пробовали ли какие-либо органы эти настройки?

ява версия "1.6.0_22"
Java (TM) SE Runtime Environment (сборка 1.6.0_22-b04)
Java HotSpot (TM) 64-разрядного сервера VM (сборка 17.1-B03, и смешанный режим)

+2

По моему опыту, не путайте с GC, он обычно выполняет достаточно хорошую работу, так как это –

+1

. Самое главное, что вы не делаете - не повторяйте, например, многократно «ломайте» строку в следующую «токен» и «остальное». Это происходит очень часто и может принести приложение на колени. –

ответ

8

относящиеся к -XX:+UseCompressedStrings, вы должны взглянуть на этот вопрос: Support for Compressed Strings being Dropped in HotSpot JVM?

И, связанные с -XX+UseStringCache, посмотреть на: JVM -XX:+StringCache argument?

КСТАТИ. Java 7 поставляется с хорошими функциями, которые позволяют настраивать кеш String при использовании интернированных строк. См. -XX:+PrintSTringTableStatistics и -XX:StringTableSize=n. Таким образом, вы можете оптимизировать размер кеша String.

+1

Чтобы уточнить: 'PrintStringTableStatistics' печатает отчет о вашем использовании пула строк, когда программа завершается. Для получения дополнительной информации см. [* String.intern в Java 6, 7 и 8 - объединение строк *] (http://java-performance.info/string-intern-in-java-6-7-8/) с помощью [ Михаил Воронцов] (http://java-performance.info/author/Mike/). –