2013-04-09 6 views
8

Profiling der Anwendung Ich habe herausgefunden, dass es viele Strings auf Heap gibt.Java GC Tuning für Strings

In meiner Situation werden Zeichenfolgen auf Heap erstellt und nicht interniert, und sie sind keine Literale.

Gibt es spezielle GC-Tuning-Techniken, wenn die Anzahl der Strings in der Anwendung sehr hoch ist.

Ich stolperte über die GC-Einstellungen -XX: + UseCompressedStrings oder -XX + UseStringCache aber nicht sicher, dass dies helfen wird. Hat irgendjemand diese Einstellungen versucht?

java version "1.6.0_22"
Java (TM) SE Runtime Environment (build 1.6.0_22-b04)
HotSpot Java (TM) 64-Bit-Server VM (build 17,1-b03, mixed mode)

+2

Nach meiner Erfahrung, nicht mit dem GC, es tut in der Regel eine gute Arbeit, wie es –

+1

ist Am wichtigsten ist, was Sie nicht tun - nicht, z. B. wiederholt eine Zeichenfolge in die nächste "brechen" "Token" und "der Rest". Das ist erstaunlich oft und kann eine App in die Knie zwingen. –

Antwort

8

Verwandte zu -XX:+UseCompressedStrings, sollten Sie einen Blick auf diese Frage: Support for Compressed Strings being Dropped in HotSpot JVM?

Und, bezogen auf -XX+UseStringCache, haben einen Blick auf: JVM -XX:+StringCache argument?

Btw. Java 7 enthält nützliche Funktionen, mit denen Sie den String-Cache optimieren können, wenn Sie die intern gespeicherten Strings verwenden. Siehe -XX:+PrintSTringTableStatistics und -XX:StringTableSize=n. Auf diese Weise können Sie die String-Cache-Größe optimieren.

+1

Zur Verdeutlichung: Die 'PrintStringTableStatistics' gibt einen Bericht über die Verwendung Ihres String-Pools aus, wenn das Programm beendet wird. Weitere Informationen finden Sie unter [* String.intern in Java 6, 7 und 8 - String-Pooling *] (http://java-performance.info/string-intern-in-java-6-7-8/) von [ Mikhail Vorontsov] (http://java-performance.info/author/Mike/). –