2013-04-09 11 views
8

アプリケーションのプロファイリングヒープに文字列がたくさんあることがわかりました。文字列のJava GCチューニング

私の状況では、文字列はヒープ上に作成され、保持されず、リテラルではありません。

アプリケーション内の文字列の数が非常に多い場合は、特定のGCチューニング手法がありますか?

GC設定を見つけた-XX:+ UseCompressedStringsまたは-XX + UseStringCacheしかし、これが役立つかどうかはわかりません。どのような体はこれらの設定を試しましたか?

Javaのバージョン "1.6.0_22"
のJava(TM)SEランタイム環境(ビルド1.6.0_22-B04)
は、Java HotSpot(TM)64ビットサーバーVM(17.1-B03、混合モードを構築)

-XX:+UseCompressedStringsに関連
+2

私の経験では、GCを混乱させてはいけません。通常は十分な仕事をしています。 –

+1

最も重要なことは、あなたがしないことです。例えば、文字列を次の"トークン"と "残りの部分"。それは驚くほど多く行われており、アプリを膝に持っていくことができます。 –

答えて

8

、あなたがこの質問を見ている必要がありますところでJVM -XX:+StringCache argument?

Support for Compressed Strings being Dropped in HotSpot JVM?

そして、-XX+UseStringCacheに関連し、見ています。 Java 7には、インターネットされたStringを使用するときにStringキャッシュのチューニングを可能にする素晴らしい機能が備わっています。 -XX:+PrintSTringTableStatisticsおよび-XX:StringTableSize=nを参照してください。この方法で、Stringキャッシュサイズを最適化できます。

+1

明確にするために、 'PrintStringTableStatistics'は、プログラム終了時の文字列プールの使用状況のレポートを出力します。詳細については、[Java 6,7および8の文字列プール - 文字列プール*](http://java-performance.info/string-intern-in-java-6-7-8/)の[ Mikhail Vorontsov](http://java-performance.info/author/Mike/)。 –