2016-07-20 31 views
0

Ich versuche, einen Weg zu finden, um den Inhalt der größten String und char[] im Java-Heap, mit einigen Java-Tool dafür zurückgeben. Ich verwende Java 6.Befehl, um den Inhalt der größten Strings und Char-Arrays auf Java 6 anzuzeigen. Wie?

Ich arbeite in einer Anwendung mit einigen Speicherproblemen. Der größte Teil des Problems stammt von den String- und Char-Arrays, die für die von JPA Hibernate (Version 3.3.0) generierten Abfragen erstellt wurden.

I jmap Tool können die Hoch zeigen verbrauchen Arbeitsspeicher:

jmap -histo:live <PID_OF_JAVA_PROCESS> | head -n 20 

Und Druck etwas wie das (die erste ist char[]):

num  #instances   #bytes class name 
---------------------------------------------- 
    1:  3286152  1412140072 [C 
    2:  10198187  239513896 [Ljava.lang.String; 
    3:  3937983  126015456 java.lang.String 
    4:  662242  47550936 [[Ljava.lang.String; 

ich den Inhalt sehen kann die internen Char-Arrays und Strings mit Eclipse Memory Analyzer nacheinander. Aber das ist nicht produktiv.

Ich möchte diese Informationen einfacher haben, mit einigen Java-Tool, um alle Informationen über diese Strings und Char-Arrays zu erhalten und in einer Textdatei gespeichert.

Mit diesen Informationen kann ich das ganze Szenario sehen und die Abfragen priorisieren, die problematischer sind.

Danke!

Antwort

1

Mit JVisualVM ist es einfach. Führen Sie Ihr Programm aus und starten Sie JVisualVM. Dann im Prozess-Browser von JVisualVM, identifizieren Sie Ihren Java-Prozess und machen Sie einen Rechtsklick und wählen Sie "Head Dump", es wird ein Dump der HEAP von Ihrem Programm verwendet.

Geben Sie in den generierten Head-Knoten im Prozess-Browser, klicken Sie dann auf die Option "Klassen", Sie haben Klassen.

Suchen Sie den Klassennamen char [] und doppelklicken Sie darauf, und Sie finden die gesuchten Informationen (alle Instanzen von char [] in Ihrem HEAP) in der Instanzentabelle. Sie können alle Tabellen sortieren.

+0

Hallo! Danke für die Antwort. Ich kann mit JvisualVM keinen Weg finden, den ganzen "Wert" des Char-Arrays zu kopieren. Ich kann jedes Zeichen einzeln nur auf Array oder dem Anfang der ganzen Information sehen (der Rest erscheint als ''). Und ich finde keine Möglichkeit, mit JvisualVM den Inhalt aller char-Arrays und Strings zu kopieren. – Dherik