2013-04-09 15 views
8

Profilowanie aplikacji Stwierdziłem, że na stercie jest dużo napisów.Strojenie Java GC dla ciągów znaków

W mojej sytuacji ciągi są tworzone na stercie, a nie internowane i nie są literałami.

Czy istnieją określone techniki dostrajania GC do zastosowania, gdy liczba ciągów w aplikacji jest bardzo wysoka.

Natknąłem się na ustawienia GC -XX: + UseCompressedStrings lub -XX + UseStringCache, ale nie jestem pewien, czy to pomoże. Czy jakieś ciało wypróbowało te ustawienia?

wersja java "1.6.0_22"
Java (TM) SE Runtime Environment (build 1.6.0_22-B04)
Java HotSpot (TM) 64-bitowy serwer VM (build 17.1-B03, tryb mieszany)

+2

Z mojego doświadczenia, nie zadzieraj z GC, zwykle robi to wystarczająco dobrze, ponieważ jest –

+1

Najważniejsze jest to, czego nie robisz - nie, na przykład, wielokrotnie "przerywaj" ciąg znaków do następnego "token" i "reszta". Robi się to niesamowicie często i może przynieść aplikację na kolana. –

Odpowiedz

8

podobne do -XX:+UseCompressedStrings, należy spojrzeć na to pytanie: Support for Compressed Strings being Dropped in HotSpot JVM?

I, związanych -XX+UseStringCache, rzucić okiem na: JVM -XX:+StringCache argument?

btw. Java 7 zawiera ładne funkcje, które umożliwiają strojenie pamięci podręcznej String przy użyciu internowanych łańcuchów. Zobacz -XX:+PrintSTringTableStatistics i -XX:StringTableSize=n. W ten sposób można zoptymalizować rozmiar pamięci podręcznej String.

+1

Aby wyjaśnić: 'PrintStringTableStatistics' drukuje raport użycia puli string, gdy program zostanie zakończony. Aby uzyskać więcej informacji, zobacz [* String.intern w Javie 6, 7 i 8 - łączenie ciągów *] (http://java-performance.info/string-intern-in-java-6-7-8/) przez [ Michaił Woroncow] (http://java-performance.info/author/Mike/). –

Powiązane problemy