Unterschied im verwendeten, festgeschriebenen und maximalen Heap-Speicher

1. Übersicht

In diesem kurzen Artikel werden wir den Unterschied zwischen verschiedenen Metriken für die Speichergröße in der JVM sehen.

Zuerst werden wir darüber sprechen, wie adaptive Größen funktionieren, und dann werden wir den Unterschied zwischen maximaler, verwendeter und festgeschriebener Größe bewerten.

2. Maximale Größe und adaptive Größe

Zwei Werte steuern , um die Größe des Haufens JVM: ein Anfangswert festgelegt über die -Xms Flag und anderen Maximalwert durch den gesteuerte -Xmx tuning - Flag .

Wenn wir diese Flags nicht angeben, wählt die JVM Standardwerte für sie aus. Diese Standardwerte hängen vom zugrunde liegenden Betriebssystem, der Menge des verfügbaren Arbeitsspeichers und natürlich von der JVM-Implementierung selbst ab:

Unabhängig von der tatsächlichen Größe und den Standardwerten beginnt die Heap-Größe mit einer Anfangsgröße. Wenn wir mehr Objekte zuweisen, kann die Größe des Heapspeichers zunehmen, um dies zu berücksichtigen. Die Heap-Größe darf jedoch nicht über die maximale Heap-Größe hinausgehen.

Einfach ausgedrückt entspricht die maximale Heap-Größe der Größe, die über das Flag -Xmx angegeben wird. Wenn wir -Xmx nicht explizit angeben , berechnet die JVM eine maximale Standardgröße .

3. Verwendete Größe

Nehmen wir nun an, wir haben seit dem Start des Programms einige Objekte zugewiesen. Die Größe des Heapspeichers kann etwas zunehmen, um neue Objekte aufzunehmen:

Der verwendete Speicherplatz ist die Speichermenge, die derzeit von Java-Objekten belegt wird . Es ist immer kleiner oder gleich der maximalen Größe.

4. Festgelegte Größe

Die festgeschriebene Größe ist die Menge an Speicher, die garantiert für die Verwendung durch die virtuelle Java-Maschine verfügbar ist . Die festgeschriebene Speichergröße ist immer größer oder gleich der verwendeten Größe.

5. Schlussfolgerung

In diesem kurzen Artikel haben wir den Unterschied zwischen maximaler, verwendeter und festgeschriebener Heap-Größe gesehen.