Domanda

Possiamo usare gli argomenti JVM per limitare la memoria allocata per JVM heap ecc.

Vorrei sapere se possiamo codificare questi valori all'interno del programma Java durante i tempi di sviluppo, invece di aggiungere argomenti JVM nella riga di comando quando eseguiamo il programma. È possibile?

È stato utile?

Soluzione

La mia prima domanda dovrebbe essere: perché lo stai impostando? Il server JVM imposta il massimo a 1/4 della dimensione della memoria principale e questo è ragionevole per la maggior parte delle applicazioni. Potresti cambiarlo costruendo il tuo possesso di JVM o potresti creare un alias come

alias java="java -Xmx30g"

Quello che puoi fare è controllare periodicamente l'utilizzo della memoria e uccidere il processo se ne usi di più. Questa è una pessima idea ovviamente.

Invece ciò che puoi fare è eseguire di nuovo il programma con gli stessi argomenti ma con la dimensione massima del heap che desideri. Cioè puoi runtime.exec.

Non puoi cambiarlo in quanto si riserva la dimensione massima della memoria all'avvio.

A proposito, c'è un malinteso comune che l'heap sia l'unica memoria che conta. Questo non è vero in quanto JVM, i thread stacks, la memoria nativa ecc. Usano un po 'di memoria, quindi è possibile che il heap sia 100 MB ma il JVM potrebbe usare 300 MB.

Altri suggerimenti

Stai cercando di cambiare la dimensione del heap in fase di esecuzione? Non puoi farlo perché il valore della dimensione del heap deve essere impostato quando JVM inizia e quindi non può cambiare.

No, non puoi farlo. Tutto ciò che puoi fare è aggiungere argomento alla riga di comando per gestire la dimensione del heap.

Una soluzione sporca può essere quella di generare un altro processo con dimensioni di heap diverse, ma non credo che questo sia quello che stai cercando. Qui C'è un esempio.

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