Wie kann ein Java-Programm während der Ausführung mitteilen, wie viel Speicher es verwendet?Wie kann ein Java-Programm während der Ausführung sagen, wie viel Speicher es benutzt?
Es ist mir egal, wie effizient es ist!
Wie kann ein Java-Programm während der Ausführung mitteilen, wie viel Speicher es verwendet?Wie kann ein Java-Programm während der Ausführung sagen, wie viel Speicher es benutzt?
Es ist mir egal, wie effizient es ist!
VonC Antwort ist eine interaktive Lösung - wenn Sie programmatisch wissen wollen, können Sie Runtime.totalMemory() verwenden können, die Gesamtmenge von der JVM verwendet, um herauszufinden, und Runtime.freeMemory(), um herauszufinden, wie viel davon noch verfügbar ist (dh es zugeordnet ist zu der JVM, aber nicht innerhalb der JVM zugewiesen - neue Objekte können diesen Speicher verwenden).
Dies sind Instanzmethoden - verwenden Sie Runtime.getRuntime(), um zuerst die Singleton-Instanz zu erhalten.
Wenn Sie sind ein java1.6 irgendwo und Ihr Programm ist in Java 1.4.2, 1.5 oder 1.6 ausgeführt wird, können Sie eine visualVM session starten, um Ihre Anwendung zu verbinden, und folgen Sie den Speicher (und vieles mehr)
(die Abbildungen im Moment nicht angezeigt werden, bezieht sich also bitte an Monitoring an application für eine Illustration.)
Danke CMS, und danke, wer auch immer das Upvoted gemacht hat ... in Anbetracht dessen, dass es nicht genau das war, was der Benutzer anforderte;) – VonC
java.lang.Runtime.totalMemory() erhalten Sie die erforderlichen Informationen geben - http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html
Dies wird nicht genau sein, aber für eine grobe Schätzung, nur Runtime.getRuntime.freeMemory()
von Runtime.getRuntime.totalMemory()
subtrahieren. Tun Sie das am Anfang des Programms, um eine Vorstellung von der JVM's
Overhead-Speicher-Nutzung und in Intervallen letzter in der Ausführung zu bekommen.
Sie haben Recht (meine erste Reaktion war von außen zu überwachen), +1 an Sie;) – VonC
Jon Skeet, hallo, kannst du mir bitte sagen, wie du das gleiche für C# machst? in Java würde ich kostenlos von total subtrahieren, oder? Und in C# habe ich nur PrivateMemorySize64 in der Process-Klasse gefunden, aber ich nehme an, dass das nur Gesamtspeicher ergibt, oder? – Pavel
@ paulpaul1076: Es wäre besser, eine neue Frage dafür zu stellen. –