Il vantaggio è che vi è una penalità di prestazioni quando si utilizza un numero sufficiente di heap da ridimensionare. Se lo si imposta inizialmente a 64 MB ma risulta che l'applicazione ha bisogno di 250 MB di carico, quando si preme vicino a 64 MB, la JVM allocherà più spazio sull'heap e possibilmente spostarsi attorno ad alcuni oggetti e fare altre attività di conservazione dei libri. Questo naturalmente richiede tempo.
Quando la tua applicazione è sotto carico, vuoi che tutte le risorse dedicate a farlo girare, quindi questo lavoro extra può rallentare la risposta dell'applicazione, o anche in alcuni casi può bloccarsi se esaurisce la memoria prima dell'heap è ridimensionato.
A volte quando si utilizza un'applicazione Java, verranno visualizzate istruzioni come "impostare Xms
e Xmx
sullo stesso valore". Questo è fatto per evitare il ridimensionamento del tutto, in modo che l'applicazione si avvii con il suo heap già grande come non lo sarà mai.
Dalla vostra esperienza, si consiglia di impostare solo Xms sullo stesso valore di Xmx? – SyBer
Dipende dall'applicazione. Se sei un istituto finanziario con un server dedicato per un'app o un set di app, è logico. Soprattutto perché un'app che si occupa di ordini di mercato può potenzialmente gestire 100 o 1000 di messaggi al secondo, con una latenza media di 2-25 ms. Un ridimensionamento potrebbe peggiorare del 5% la latenza, per tutti gli ordini inviati in quel momento. Potresti persino cancellare gli ordini. Come sempre, però, profilo prima di tentare di ottimizzare. – Phil
Va notato che per i sistemi con un numero elevato di JVM attive -Xms aumenterà l'ingombro medio della JVM, mentre consentire alla JVM di autogestire la propria diffusione dell'heap consente di utilizzare schemi di raccolta dell'impronta di memoria. – Xailor