2012-05-15 2 views
6

Sto per distribuire un'applicazione su un server live e in questo momento sono nella parte in cui devo impostare le dimensioni heap e permgen per il jvm. Ho visto molti articoli e tutti dicono di "impostare la dimensione minima dell'heap su (un certo numero)" e di "impostare la dimensione massima dell'heap su (un certo numero)", ma nessuno di questi articoli dice davvero perché la dimensione minima dell'heap deve essere impostata. Capisco il motivo per impostare la dimensione massima dell'heap, ma non sul minimo. Sarei grato se gettassi un po 'di luce su questo.Ho davvero bisogno di definire la dimensione minima dell'heap java

+0

Beh, perché dovresti impostare un limite inferiore su qualcosa? Perché il tuo programma potrebbe richiedere un certo importo. Sto fraintendendo la domanda? Vuoi dire che l'impostazione min è effettivamente necessaria? – keyser

+2

possibile duplicato di [Qual è il motivo per impostare una dimensione minima dell'heap Java?] (Http://stackoverflow.com/questions/8085949/whats-the-reason-to-set-a-minimal-java-heap-size) – assylias

risposta

6

L'heap in Java è l'area di allocazione di memoria generale. Supponiamo di impostare la dimensione minima dell'heap su 1000 byte (questo è un numero assurdamente basso). Ora diciamo che istanzio un oggetto nel mio programma che contiene del testo lungo duemila caratteri. Non posso salvare questo oggetto senza prima espandere la dimensione del mio heap. Ora, presumibilmente il mio parametro heap massimo è abbastanza grande da permetterlo - ma questo è il motivo per impostare la dimensione massima dell'heap.

Tuttavia, supponiamo che il mio server abbia 4G di ram, e ho impostato la dimensione minima dell'heap su quella. (Un numero assurdamente grande). Se nessun altro programma occupasse memoria, funzionerebbe. Tuttavia, se avessi avviato un secondo processo con il mio programma java, non sarebbe stato in grado di allocare memoria sufficiente e uscire.

La dimensione minima fa due cose per voi; in primo luogo, rende la memoria disponibile rapidamente per consentire un avvio rapido. In secondo luogo, ti consente di ottimizzare la jvm in modo da avere alcuni invarianti, permettendoti di fare previsioni su quanti processi puoi eseguire. Se la dimensione minima dell'heap è troppo grande, probabilmente stai sprecando memoria in un processo che non ha mai bisogno di molto, limitando la capacità del tuo sistema. Se lo si imposta troppo piccolo, i programmi impiegheranno molto tempo per avviarsi, influenzando negativamente le prestazioni del processo.

1

impostazione di una dimensione minima dell'heap Java permette di assegnare una certa memoria fino anteriore che migliora il tempo di avvio.

1

L'impostazione della dimensione minima in modo esplicito (oltre il valore predefinito) consente di ripartire la frammentazione a livello di SO e di avviare le prestazioni temporali.

Java Heap è supportato dalla memoria allocata dal sistema operativo, maggiore è il blocco iniziale, minore è la ridistribuzione e la frammentazione che si verificherà.

Impostazione del minimo uguale o quasi uguale al massimo, eliminerà completamente queste situazioni.