Differenza di memoria heap usata, impegnata e massima

1. Panoramica

In questo breve articolo, vedremo la differenza tra le varie metriche della dimensione della memoria nella JVM.

Innanzitutto, parleremo di come funziona il dimensionamento adattivo, quindi valuteremo la differenza tra le dimensioni massime, utilizzate e impegnate.

2. Dimensione massima e dimensionamento adattivo

Due valori controllano la dimensione dell'heap JVM: un valore iniziale specificato tramite il flag -Xms e un altro valore massimo controllato dal flag di ottimizzazione -Xmx .

Se non specifichiamo questi flag, la JVM sceglierà i valori predefiniti per essi. Questi valori predefiniti dipendono dal sistema operativo sottostante, dalla quantità di RAM disponibile e, ovviamente, dall'implementazione della JVM stessa:

Indipendentemente dalla dimensione effettiva e dai valori predefiniti, la dimensione dell'heap inizia con una dimensione iniziale. Man mano che allochiamo più oggetti, la dimensione dell'heap potrebbe aumentare per adattarsi a questo. La dimensione dell'heap, tuttavia, non può andare oltre la dimensione massima dell'heap.

In parole povere, la dimensione massima dell'heap è la dimensione specificata tramite il flag -Xmx . Inoltre, quando non specifichiamo esplicitamente -Xmx , la JVM calcola una dimensione massima predefinita .

3. Dimensione utilizzata

Supponiamo ora di aver allocato alcuni oggetti dall'inizio del programma. La dimensione dell'heap potrebbe aumentare leggermente per adattarsi a nuovi oggetti:

Lo spazio utilizzato è la quantità di memoria attualmente occupata dagli oggetti Java . È sempre inferiore o uguale alla dimensione massima.

4. Dimensione impegnata

La dimensione impegnata è la quantità di memoria garantita per essere disponibile per l'utilizzo dalla Java virtual machine . La dimensione della memoria impegnata è sempre maggiore o uguale alla dimensione utilizzata.

5. conclusione

In questo breve articolo, abbiamo visto la differenza tra la dimensione dell'heap massima, utilizzata e impegnata.