JVM -XX: + StringCache-Argument?
Vor kurzem Las ich über all die JVM-Argumente an, die in JRE 6 [Java-VM-Optionen] und sah :
-XX:+StringCache : Aktiviert die Zwischenspeicherung von Häufig reserviert strings.
Nun ich hatte immer den Eindruck, dass Java gehalten, einen pool von Internierten (richtiges Wort?) Saiten und, wenn es so etwas wie die String-Verkettung mit literalen es war nicht die Schaffung neuer Objekte, sondern ziehen Sie aus diesem pool. Hat jemand schon mit diesem argument, oder erklären kann, warum es nötig wäre?
EDIT: ich habe versucht, führen Sie einen benchmark, um zu sehen, ob dieses argument hatte keine Wirkung und war nicht in der Lage, um die Sun JVM zu erkennen. Dies wurde mit:
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode,
sharing)
So, ich bin mir nicht sicher, ob dieses argument überhaupt funktioniert.
InformationsquelleAutor der Frage Gandalf | 2009-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, wenn verwendet mit
-XX:+AggressiveOpts
es ermöglicht die gleichenString
Objekte zurückgegeben werden, die beim erstellen derString
mit dem gleichen text (wenn auch nicht durchnew String
natürlich). Es ist ein Profil phase, wo ein cache aufzubauen, und nach einem Punkt der cache eingeschaltet ist schreibgeschützt. Es bekommt höhere Bewertungen in bestimmten benchmarks.InformationsquelleAutor der Antwort Tom Hawtin - tackline
-XX:-UseStringCache funktioniert bei mir, seltsam.
mein jdk-version 1.6.0_22
InformationsquelleAutor der Antwort xshi
Auch ich konnte nicht die oben zu arbeiten, aber die neuesten JBB @ spec.org es zeigt: -XX:-UseStringCache. Ich werde re-run benchmarks, um zu sehen, ob es einen Unterschied macht (ein XML-schwere app).
InformationsquelleAutor der Antwort mark d
Ich auch nicht in der Lage gewesen zu finden, um eine JVM, die respektiert diese Einstellung, so kommentierte die Qualität und damit die Brauchbarkeit der Dokumentation rund um die JVM-Parameter ist schrecklich, und doch aus irgendeinem Grund scheint ein Bereich zu sein, wo die JVM-Anbieter sehen Raum für Differenzierung im Wettbewerb - obwohl um fair zu sein, Oracle/Sun ist mit Abstand das Schlimmste.
Jedenfalls, wenn Sie feststellen, dass Ihre app in einer bestimmten Gegend verwendet eine kleine Anzahl von string-Werten wiederholt, dann ist es definitiv sinnvoll, Praktikum - durch die Verwendung der Zeichenfolge.intern () - Methode zum zurückgeben eines intern-pool Wert. Beachten Sie, dass Sie haben, um den Rückgabewert verwenden, dies ist nicht eine Nebenwirkung auf den ursprünglichen Wert.
Als mit allen profiling/performance-tweaks dies muss sorgfältig durchgeführt werden mit Metriken und testen. Es können erheblich sein (für mich) aber wenn der pool der Werte ist nicht klein, es beeinträchtigt die Leistung und Sie müssen sich bewusst sein, dass der pool von String-Werten in der Perm-Gen und so mit wird es auch Auswirkungen auf Speicherverbrauch, GC etc.
InformationsquelleAutor der Antwort Jason
Ab JDK 8.0, diese option wurde entfernt. Es ist mir unklar, was, wenn überhaupt, kann als Ersatz verwendet werden.
http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
InformationsquelleAutor der Antwort mjuarez
Ich nicht in der Lage zu finden, eine einzige JVM, die nimmt auch dieses vermeintliche argument - also denke ich, es gibt sonst nicht viel zu sagen.
InformationsquelleAutor der Antwort Gandalf