Domanda

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

Se impostato il jvm mangerà tutto il montone fino al limite e quindi inizierà la raccolta dei rifiuti e fermerà tutto mentre sfoglia 15G di oggetti heap?

Altrimenti la jvm danneggerà le prestazioni non usando tutto il ram disponibile sulla macchina.

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

Grazie

È stato utile?

Soluzione

-Xmx15G imposterà la dimensione massima dell'heap su 15 gig. Java assegnerà solo ciò di cui ha bisogno durante l'esecuzione. Se non lo si imposta, utilizzerà solo l'impostazione predefinita. Per informazioni sull'impostazione predefinita, vedi questo post .

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

Di solito puoi impostarli entrambi su valori appropriati a seconda di come stai regolando la JVM.

Altri suggerimenti

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

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

  

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

Utilizzando l'opzione -Xmx è possibile modificare la dimensione massima dell'heap. Vedi il java - Java Avvio applicazioni documentazione per i dettagli di utilizzo.

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

Quindi la tua applicazione non fallirà con OutOfMemoryError se non la imposti? Sono confuso su questa domanda. Come può essere eseguita l'applicazione senza questa opzione?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top