2014-12-31 2 views
5

Ich Profiling eine Anwendung und die Verwendung von Intern zur Eingabe von Strings wirklich hilft. Was ich finden möchte, ist eine gute Zahl für den Objektpool, so dass ich keine Leistungseinbußen habe. Wie kann ich wissen, wie viele Strings in den internen Pool eingefügt wurden?Wie viele Strings sind in JVM String-Pool Intern

Ich habe einige Produktions-Trace, kann ich nicht wirklich die Eingabe zählen.

Bietet die JVM eine API dafür?

Antwort

6

Beginnend mit JDK7 können Sie das JVM-Flag -XX:+PrintStringTableStatistics verwenden, um Informationen über die Größe der Zeichenkettentabelle zu drucken, z. B. die Anzahl der Buckets und die Größe eines Buckets.

Sie können auch das Tool jmap verwenden, indem Sie den Befehl jmap -heap *process_id* aufrufen, der am Ende die Anzahl der intern gespeicherten Strings und die Gesamtgröße anzeigen würde (erfordert auch JDK7 +).

Überprüfen Sie this blog post für weitere Details.

+0

Dies druckt die Statistik einmal auf Standardausgabe, ich möchte das irgendwie überwachen. Da es nicht verwendete Zeichenfolgen freigibt, möchte ich die maximale Anzahl der Zeichenfolgen sehen, die es im Anwendungslebenszyklus belegt. – Zamir

+1

Ein weiterer nützlicher Blog-Beitrag zu diesem Thema: [* 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/) –

Verwandte Themen