C'è qualche vantaggio nell'impostare Xms e Xmx sullo stesso valore?


Di solito ho impostato -Xms512m e -Xmx1g in modo che all'avvio della JVM allochi 512 MB e aumenti gradualmente l'heap a 1 GB se necessario. Ma vedo questi valori impostati allo stesso modo di 1g in un'istanza server dedicata. C'è qualche vantaggio per avere entrambi impostati sullo stesso valore?

Author: slm, 2017-04-27

5 answers

Beh ci sono un paio di cose.

  1. Il programma inizierà con il valore-Xms e se il valore è minore alla fine costringerà GC a verificarsi più frequentemente
  2. Una volta che il programma raggiunge l'heap-Xms, jvm richiede OS per memoria aggiuntiva e alla fine afferra-Xmx che richiede ulteriore tempo che porta a problemi di prestazioni, si potrebbe anche impostarlo su quello all'inizio evitando jvm per richiedere memoria aggiuntiva.

È molto ben risposto qui - https://developer.jboss.org/thread/149559?_sscc=t

 18
Author: Fairoz, 2017-10-09 15:00:57

Da Oracle Java SE 8 documenti:

Https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/sizing.html Per impostazione predefinita, la macchina virtuale cresce o si restringe l'heap ad ogni collezione per cercare di mantenere la proporzione di spazio libero per vivere gli oggetti ad ogni collezione all'interno di un intervallo specifico. Questo intervallo di destinazione è impostato in percentuale dai parametri -XX:MinHeapFreeRatio=<minimum> e -XX:MaxHeapFreeRatio=<maximum>, e la dimensione totale è delimitata sotto da -Xms<min> e sopra da -Xmx<max>. Impostazione -Xms e {[5] } allo stesso valore aumenta la prevedibilità rimuovendo il dimensionamento più importante decisione dalla macchina virtuale. Tuttavia, la macchina virtuale è quindi incapace di compensare se fai una scelta sbagliata.

Se il valore di-Xms e-Xmx è lo stesso, JVM non dovrà regolare la dimensione dell'heap e ciò significa meno lavoro da parte di JVM e più tempo per l'applicazione. ma se il valore scelto è una scelta sbagliata per-Xms, parte della memoria allocata non verrà mai utilizzata perché l'heap non si ridurrà mai e se si tratta di una scelta sbagliata per-Xmx si otterrà OutOfMemoryError.

 10
Author: Dev, 2018-10-06 07:32:47

Ci sono alcuni vantaggi.

  • se sai che la dimensione crescerà al massimo, ad esempio in un benchmark, puoi anche iniziare con la dimensione che sai di aver bisogno.
  • è possibile ottenere prestazioni migliori dando al programma più memoria che potrebbe naturalmente darsi. YMWV

In generale, renderei l'Xms un valore che sono sicuro che userà, e il doppio di questo per la head room per casi d'uso futuri o situazioni per cui non abbiamo testato. cioè una taglia che non abbiamo aspettatevi, ma potrebbe usare.

In breve, il massimo è il punto in cui preferiresti che il programma fallisse piuttosto che usarlo di più.

 7
Author: Peter Lawrey, 2018-08-29 16:27:14

AFAIK Un motivo in più, è che l'espansione dell'heap è un evento stop-the-world; impostarli sullo stesso valore lo impedirà.

 6
Author: Eugene, 2017-04-27 08:31:00
  1. L'applicazione subirà frequenti GC con un valore-Xms inferiore.
  2. Ogni volta che si richiede più memoria dal sistema operativo con tempo di consumo.
  3. Soprattutto, se la tua applicazione è critica per le prestazioni, dovresti sicuramente evitare che le pagine di memoria si scambino da/verso il disco in quanto ciò causerà più tempo per GC. Per evitare ciò, la memoria può essere bloccata. Ma se Xms e Xmx non sono uguali, la memoria allocata dopo l'allocazione iniziale non verrà bloccata.
 1
Author: Dexter, 2018-10-20 19:59:32