Speicherverbrauch in JVM-Profiler und Mac OS X-Aktivitätsmonitor

9

Ich habe meine Java-Anwendung profiliert und war verwirrt über die gemeldete Speicherauslastung meiner Anwendung (über Eclipse ausgeführt). Es unterscheidet sich immer sehr von der vom Profiler gemeldeten Speicherauslastung und stimmt nicht wirklich mit sich selbst überein.

Die JVM-Flags für die Anwendung sind:

%Vor%

Dieses Bild zeigt, dass der gemeldete Speicher des Prozesses "Java" 1,67 GB ist. Wenn ich auf diesen Prozess doppelklicke, zeigt die Aufschlüsselung 1,15 GB "Real Memory Size" und die verschiedenen anderen Speichermetriken.

Der Flight Recorder zeigt, dass die Anwendung die 1-GB-Heap-Größe einhält. Ich habe Tests durchgeführt, die zeigen, dass auch die Grenzen des Metaspace eingehalten werden.

Meine Frage ist zweifach: 1) Irgendeine Idee warum die gemeldete Speichernutzung so unterschiedlich ist zwischen dem Prozess (wie von Mac OS X berichtet) und dem Profiler? 2) Irgendeine Idee, warum es eine Diskrepanz zwischen dem im Aktivitätsmonitor angezeigten Speicher und dem Ausfall des Prozessspeichers gibt?

    
alistair 29.05.2017, 19:47
quelle

1 Antwort

4

1) Realer Speicher ist alles zusammen: Heap + Stack + MetaSpace (früher PermGen) + CompressedClassSpaceSize + usw. Sie begrenzen den Heap auf 1GiB, wie vom Flight Recorder gezeigt. Das OS zeigt alles zusammen, nicht nur den Heap, hier entsteht diese Disparität. Es ist nicht OS / JVM-spezifisch (d. H., Versuchen Sie es * nix, Windows, Sie werden das gleiche sehen).

2) Das ist OS-spezifisch. Für Mac OS siehe diese sehr detaillierte Antwort

    
D. Kovács 09.10.2017 07:52
quelle