Numerosi parametri influenzano la dimensione della generazione. Il diagramma seguente illustra la differenza tra spazio dedicato e spazio virtuale nell'heap. All'inizializzazione della macchina virtuale, l'intero spazio per l'heap è riservato. La dimensione dello spazio riservato può essere specificata con l' -Xmx
opzione. Se il valore del -Xms
parametro è inferiore al valore del -Xmx
parametro, non tutto lo spazio riservato viene immediatamente assegnato alla macchina virtuale. Lo spazio non assegnato è etichettato "virtuale" in questa figura. Le diverse parti dell'heap (generazione permanente, generazione in carica e generazione in giovane età) possono crescere fino al limite dello spazio virtuale, se necessario.
Per impostazione predefinita, la macchina virtuale aumenta o riduce l'heap in ogni raccolta per cercare di mantenere la proporzione di spazio libero per vivere gli oggetti in ogni raccolta all'interno di un intervallo specifico. Questo intervallo target è impostato come percentuale dai parametri XX:MinHeapFreeRatio=<minimum>
e -XX:MaxHeapFreeRatio=<maximum>
, e la dimensione totale è limitata da -Xms<min>
e sopra da -Xmx<max>
.
Parametro Valore predefinito
MinHeapFreeRatio 40
MaxHeapFreeRatio 70
-Xms 3670k
-Xmx 64m
I valori predefiniti dei parametri delle dimensioni dell'heap su sistemi a 64 bit sono stati ridimensionati di circa il 30%. Questo aumento ha lo scopo di compensare la maggiore dimensione degli oggetti su un sistema a 64 bit.
Con questi parametri, se la percentuale di spazio libero in una generazione scende al di sotto del 40%, la generazione verrà espansa per mantenere il 40% di spazio libero, fino alla dimensione massima consentita della generazione. Allo stesso modo, se lo spazio libero supera il 70%, la generazione verrà contratta in modo che solo il 70% dello spazio sia libero, soggetto alle dimensioni minime della generazione.
Spesso le applicazioni server di grandi dimensioni presentano due problemi con queste impostazioni predefinite. Uno è l'avvio lento, perché l'heap iniziale è piccolo e deve essere ridimensionato su molte raccolte principali. Un problema più urgente è che la dimensione massima dell'heap predefinita è irragionevolmente piccola per la maggior parte delle applicazioni server. Le regole empiriche per le applicazioni server sono: