2013-02-05 19 views
6

Ho aumentato il limite di memoria Xmx java quando è stata generata un'eccezione relativa allo spazio heap insufficiente. Tuttavia, attualmente sto vivendo un tempo di esecuzione molto lungo che potrebbe essere legato alla memoria ma non ho ancora visto l'eccezione lanciata (ancora).La JVM scambia l'heap?

Mi chiedo cosa possa spiegare il lungo tempo di esecuzione. La JVM scambia l'heap con il disco?

sto usando HotSpot 1.6.0 aggiornamento 34.

+0

Lo swapping è un comportamento del sistema operativo, suppongo. – StarPinkER

risposta

11

La JVM non si scambia su disco, no. Il sistema operativo potrebbe farlo. È possibile rilevare questo controllando le statistiche del sistema operativo sul processo.

Mentre la JVM esaurisce la memoria, la garbage collection viene attivata sempre più frequentemente. Ogni corsa libera meno memoria, aumentando ulteriormente il tasso di GC. Alla fine viene speso un sacco di tempo in GC, che probabilmente è il rallentamento che vedi.

La JVM non attende fino a quando 0 byte vengono liberati per generare OutOfMemoryError. In realtà si arrenderà quando GC sta semplicemente prendendo troppo tempo rispetto al numero di byte liberati.

2

Una possibile conseguenza di un cumulo più grande è un aumento dei tempi di GC - la JVM deve analizzare uno spazio più grande, quindi ci vuole più tempo - in particolare se la sua un GC stop-the-world.

Puoi approfondire la tua domanda un po '?

Quale dimensione di heap stai usando? Quali durate stai vedendo? Qual'è il modello di utilizzo degli oggetti nella tua applicazione? Alcuni oggetti vissuti a lungo, o molti di quelli a vita breve, per esempio.

+0

Ho impostato Xmx a 2 GB e sto riprovando con 3 GB. L'esecuzione a thread singolo ha generato l'eccezione dello spazio heap con 2 GB. Ho eseguito per 15 minuti con 3 GB e non è stato lanciato, ma non posso sapere con certezza se 3 GB è sufficiente poiché il tempo di esecuzione totale sarebbe di centinaia di ore. Se il limite massimo è di 15 minuti, sembra utile usare 3 GB come limite per la mia griglia (9 nodi). Avrò 9 oggetti in esecuzione su 9 nodi, speriamo per il 1/9 della durata. – H2ONaCl