App Java che utilizza molta memoria. Usa-Xmx?


Ho un'app java che utilizza circa 15G su una macchina con 16G. Non lo so se dovrei impostare la dimensione massima dell'heap.

Se impostato, la jvm mangerà tutta la ram fino al limite e quindi inizierà la raccolta dei rifiuti e fermerà tutto mentre sforna 15G di oggetti heap?

In caso contrario, la jvm danneggerà le prestazioni non utilizzando tutta la ram disponibile sulla macchina.

La mia vm specifica è: Java HotSpot (TM) VM server a 64 bit (build 1.6.0_03-b05, misto modalità).

Grazie

Author: Martin Redmond, 2009-06-23

3 answers

-Xmx15G imposterà la dimensione massima dell'heap su 15 gig. Java assegnerà solo ciò di cui ha bisogno mentre viene eseguito. Se non lo si imposta, utilizzerà solo il valore predefinito. Per informazioni sul valore predefinito, vedere questo post .

-Xms15G imposta l'heap minimo su 15 gig. Ciò costringe java ad allocare 15 gig di spazio heap prima che inizi l'esecuzione, che ne abbia bisogno o meno.

Di solito è possibile impostarli entrambi su valori appropriati a seconda di come si sta sintonizzando la JVM.

 18
Author: Cogsy, 2017-05-23 12:10:16

In Java 6, la dimensione massima predefinita dell'heap è determinata dalla quantità di memoria di sistema presente.

Secondo la pagina Garbage Collector Ergonomics , la dimensione massima dell'heap è:

Più piccolo di 1/4 del fisico memoria o 1GB. Prima di J2SE 5.0, il la dimensione massima predefinita dell'heap era di 64 MB.

Utilizzando l'opzione -Xmx può essere utilizzato per modificare la dimensione massima dell'heap. Vedi il java - la documentazione di avvio applicazioni Java per l'utilizzo estremi.

 12
Author: coobird, 2009-06-23 02:18:01

Se non si imposta una dimensione massima dell'heap (con -Xmx), il massimo predefinito non è solo 64 MB?

Quindi la tua applicazione non fallirà con OutOfMemoryError s se non la imposti? Sono confuso su questa domanda. Come può funzionare la tua applicazione senza questo interruttore?

 0
Author: matt b, 2009-06-23 01:56:38