2013-09-26 7 views
8

Czytałem Java HotSpot VM Options. Widziałem kilka interesujących przełączników VM, głównie dotyczących Strings - co ma dla mnie wielką wartość, ponieważ moja aplikacja wykonuje ciężkie manipulacje Stringami. Są to:Jaki jest bieżący stan opcji wydajności Oracle Java HotSpot VM (+ UseStringCache, + UseCompressedStrings, + OptimizeStringConcat)

  • -XX:+UseStringCache
  • -XX:+UseCompressedStrings
  • -XX:+OptimizeStringConcat

zastanawiałem się - czy te przełączniki domyślnie? Jakie jest doświadczenie w używaniu ich w świecie rzeczywistym? Czy robią różnicę?

Odpowiedz

5

Biorąc pod uwagę wydajność String, spojrzeć na -XX:+PrintStringTableStatistics i -XX:StringTableSize=. Java 7 zawiera ładne funkcje, które umożliwiają strojenie pamięci podręcznej String przy użyciu internowanych łańcuchów. W ten sposób można zoptymalizować rozmiar pamięci podręcznej String.

I powiązany Wydajność String Q/A: Java GC tuning for strings

+0

Ta odpowiedź jest tym, czego szukałem, dzięki! – RockyMM

12

Aby sprawdzić domyślne używać

java -XX:+PrintFlagsFinal 

, aby znaleźć dokładnie to, co chcesz, możesz

java -XX:+PrintFlagsFinal | grep UseCompressedStrings 
+0

Dziękuję za to, ale byłem szukanie bardziej kompletnej odpowiedzi. – RockyMM

7

wiem, że -XX:+UseCompressedStrings został usunięty w Javie 7 na podstawie było to zbyt trudne, aby wspierać.

Dla Java 7 aktualizacją 40

$ java -XX:+PrintFlagsFinal 2>&1 | grep UseStringCache 
    bool UseStringCache       = false   {product}   
$ java -XX:+PrintFlagsFinal 2>&1 | grep OptimizeStringConcat 
    bool OptimizeStringConcat      = true   {C2 product} 
+1

Widzę, że opublikowałeś podobne pytanie, jakie miałem w zeszłym roku. To w zasadzie obejmuje to, co muszę wiedzieć :) – RockyMM

2

podstawie mojego sprawdzenia JDK6u21 i JDK7u21 użyciu PrintFlagsFinal, mamy następujące wartości:

       JDK6u21  JDK7u21 

-XX:+UseStringCache    false   false 
-XX:+UseCompressedStrings  false <unsupported> 
-XX:+OptimizeStringConcat  false   true 
Powiązane problemy