2011-01-12 5 views

risposta

85

Secondo Garbage Collector Ergonomics [Oracle]:

iniziale dimensione heap:

ingrandita di 1/64th di memoria fisica della macchina sulla macchina o qualche minimo ragionevole . Prima di J2SE 5.0, , la dimensione heap iniziale predefinita era un minimo ragionevole , che varia in base alla piattaforma . È possibile sovrascrivere questo valore predefinito utilizzando l'opzione -2ms da riga di comando .

massima dimensione heap:

Più piccolo di 1/4 di memoria fisica o 1GB. Prima di J2SE 5.0, la dimensione heap massima predefinita di era 64 MB. È possibile sovrascrivere questa impostazione predefinita utilizzando l'opzione della riga di comando -Xmx .

UPDATE:

Come sottolineato da Tom Anderson nel suo commento, quanto sopra è per le macchine di classe server. Da Ergonomics in the 5.0 JavaTM Virtual Machine:

Nella piattaforma J2SE versione 5.0 una classe di macchina denominata una macchina classe server è stato definito come una macchina con processori

  • 2 o più fisici
  • 2 o più Gbyte di memoria fisica

ad eccezione di 32 bit piattaforme con una versione del sistema operativo Windows . Su tutte le altre piattaforme i valori predefiniti sono uguali ai valori predefiniti per la versione 1.4.2.

Nella versione piattaforma J2SE 1.4.2 da predefinite seguenti selezioni sono state fatte

  • dimensione heap iniziale di 4 Mbyte
  • massima dimensione mucchio di 64 Mbyte
+3

Attenzione: questo è per macchine di classe server, non di classe client. È necessario leggere il documento insieme a http://java.sun.com/docs/hotspot/gc5.0/ergo5.html che definisce tali termini e ciò che accade ai computer di classe client. dogbane, potrei umilmente suggerire di modificare la tua risposta per citare i passaggi pertinenti? –

+2

Questo è un valore predefinito ridicolmente basso nel 2012. Pochissime applicazioni gravi si inseriscono in 64 megabyte. –

+1

Vedere la risposta di Ernesto 30 ottobre 2012 per le macchine client dopo l'aggiornamento 18 di Java 6. –

24

Questo è cambiato con l'aggiornamento di java 6 18.http://www.oracle.com/technetwork/java/javase/6u18-142093.html

Supponendo che abbiamo più di 1 GB di memoria fisica (abbastanza comune in questi giorni), è sempre un quarto della tua memoria fisica.

+4

Non corretto, la pagina collegata dice 'maggiore o uguale a 1 gigabyte di memoria fisica risulta in una dimensione massima dell'heap di 256 megabyte' –

+2

Ho appena controllato su una macchina Linux con memoria fisica da 5 GB. L'heap massimo predefinito mostra 1.5gb – ernesto

10

Ernesto ha ragione. Secondo il link che ha postato [1]:

client Aggiornamento configurazione heap JVM

Nella JVM client ...

  • La dimensione predefinita massima heap è la metà della memoria fisica fino a una memoria fisica di 192 megabyte e un quarto della memoria fisica fino a una memoria fisica di 1 gigabyte.

    Ad esempio, se la propria macchina ha 128 megabyte di memoria fisica, la dimensione massima dell'heap è 64 megabyte e maggiore o uguale a 1 gigabyte di memoria fisica risulta in una dimensione massima dell'heap di 256 megabyte.

  • La dimensione massima dell'heap non è effettivamente utilizzata da JVM a meno che il programma non crei abbastanza oggetti per richiederlo. Una quantità molto più piccola, denominata la dimensione iniziale dell'heap, viene allocata durante l'inizializzazione JVM. ...

  • ...
  • Server JVM ergonomia configurazione mucchio sono ora uguale al Cliente, tranne che la dimensione massima heap predefinito per JVM a 32 bit è 1 gigabyte, corrispondente ad una dimensione di memoria fisica di 4 gigabyte e per JVM a 64 bit è di 32 gigabyte, corrispondente a una dimensione di memoria fisica di 128 gigabyte.

[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html

369

Sui sistemi Windows, è possibile utilizzare il seguente comando per scoprire i valori di default sul sistema in cui le applicazioni in esecuzione.

java -XX: + PrintFlagsFinal -version | findstr HEAPSIZE

cercare le opzioni MaxHeapSize (per -Xmx) e InitialHeapSize per -Xms.

Su un sistema Unix/Linux, si può fare

java -XX: + PrintFlagsFinal -version | grep HeapSize

Credo che l'output risultante sia in byte.

+3

Speravo in una buona opzione come questa, ma non funzionava con me utilizzando Java 6 VM di IBM. –

+0

Grande! Posso giocare con tutte queste opzioni predefinite? Qual è la variabile ENV corrispondente per ciascuno? – Elist

+17

Nel mio caso su Linux, 'InitialHeapSize = 262803264' e' MaxHeapSize = 4206886912', che è di circa ** 256 MB ** e ** 4 GB ** se non sbaglio. Significa che ogni JVM inizia come se fosse lanciato con le opzioni '-Xms256m -Xmx4g'? – Yura

6

valore predefinito viene scelto in fase di esecuzione in base alla configurazione del sistema

Dai un'occhiata alla documentazione page

Mucchio predefinita Dimensioni

A meno che le dimensioni iniziali e heap massima sono specificate sulla riga di comando, questi sono calcolati in base alla quantità di memoria sulla macchina.

  1. client JVM di default iniziale e massima Heap Taglie:

    La dimensione predefinita heap massima è metà della memoria fisica fino a una dimensione di memoria fisica di 192 megabyte (MB) e altrimenti un quarto della memoria fisica fino a una dimensione di memoria fisica di 1 gigabyte (GB).

  2. Server JVM di default iniziale e massima Heap Taglie:

    On JVM a 32 bit, la massima dimensione predefinita heap può essere fino a 1 GB se v'è 4 GB o più di memoria fisica. On JVM a 64 bit, la dimensione massima heap predefinito può essere fino a 32 GB se c'è 128 GB o più di memoria fisica

Nei impostazioni di configurazione del sistema influenza il valore di default?

È possibile specificare le dimensioni iniziali e massima heap usando le bandiere -Xms (dimensione iniziale heap) e -Xmx (dimensione heap massima). Se sapete quanto heap l'applicazione deve funzionare bene, è possibile impostare -Xms e -Xmx allo stesso valore

-2

Java8 prende ingrandita di 1/6th della vostra memoria fisica per XmsSize (Minimum HeapSize) e Smaller di 1/4th della memoria fisica per il tuo -Xmxsize (Maximum HeapSize).

è possibile controllare il predefinita Dimensioni Java Heap da:

In di Windows:

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize" 

In Linux:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize' 

Quali impostazioni di configurazione del sistema influenzano il valore predefinito?

La tua memoria fisica e la tua versione di Java.