2017-06-17 3 views
1

Mein Computer verfügt über 64 GB Speicher und in Eclipse stelle ich die Standard VM Argumente wie folgt:Warum ist der tatsächliche Speicherbedarf der JVM so viel größer als mein Xmx?

-Xms512m -Xmx9g 

dachte ich, die 9GB die größte Größe meiner Java-Anwendung nutzen können. Nachdem ich meine Anwendung für eine Weile gestartet habe, kann ich jedoch vom Systemmonitor sehen, dass mein Java-Anwendungsprozess fast 16 GB Arbeitsspeicher verwendet. Wie kann es größer als das VM-Argument sein, das ich als 9GB einstelle?

+1

@Ravi es wie ein Duplikat sieht nicht aus, da die Frage nicht, was Xmx ist, sondern ist, warum es nicht wie erwartet funktionieren. – Harald

+0

@ user697911 auf welchen Systemmonitor beziehen Sie sich auch und auf welche Nummer genau schauen Sie? – Harald

+0

Wie Sie Informationen über 'Xmx' fragen. Also, es ist dort gut erklärt. Sie müssen Ihren Task-Manager-Bildschirm freigeben. Um uns zu zeigen, wie es mehr Speicher braucht – Ravi

Antwort

1

-Xmx legt die maximale Größe von JVM 'Heap' Speicher fest, der für Java-Objekte verwendet wird (organisiert in mehreren 'Generationen': Eden, Survivor, Tenured/Old). Outside der Heap JVM ordnet auch:

  • geladenen Klassen und JITted Code (je nach Bedarf)

  • Fadenstapel

  • 'direkte' Puffer NIO

  • nativen Code : die JVM selbst (einschließlich der verwendeten Systembibliotheken) und der von JNI oder JNA geladene/aufgerufene Code

  • Daten von nativem Code verwaltet

Die erste Gruppe sind in CodeCache und PermGen durch Java 7 und metaSpace in Java 8; obwohl nicht im Heap, werden diese durch MemoryPoolMXBean wie die Heap-Speicherplätze gemeldet und können durch verschiedene Optionen wie -XX:MaxPermSize -XX:MaxMetaspaceSize angepasst werden. Die verbleibenden Gruppen können nicht über AFAIK aus Java gemeldet werden. Die Stackgröße kann mit -Xss (aber global für alle Threads) festgelegt werden.

Siehe auch What is the difference between Java Non Heap Memory and Stack Memory? Are they Same if not what is the difference between them? und Java: non-heap-memory analyzes

Verwandte Themen