2013-02-04 10 views
7

Il seguente grafico indica che sto utilizzando la memoria e che non si tratta di dati inutili?È indicativo di una perdita di memoria in Java?

enter image description here

mi aspettavo il grafico arancione (memoria heap allocata) per andare verso il basso una volta che comincio usando meno del mucchio.

  • È un'assunzione non valida?
  • Una volta assegnato, l'heap non si restringe fino alla chiusura del programma?
+2

Sulla maggior JVMs, una volta mucchio viene allocato non si restringe fino a quando il programma termina. –

risposta

10

È chiaro dal grafico che la JVM è in grado di ridurre l'heap. Questo può essere visto dalla linea arancione prendendo un leggero calo poco prima delle 15:10.

Tuttavia, in seguito la JVM sceglie di non ridurre l'heap. Questo è quasi certamente perché non viene utilizzata una frazione insufficiente dell'heap. Il comportamento è controllato da -XX:MinHeapFreeRatio e -XX:MaxHeapFreeRatio.

Per una discussione, vedi http://stopcoding.wordpress.com/2010/04/12/more-on-the-incredible-shrinking-jvm-heap/

+0

Fantastico, grazie. :) – sdasdadas

+0

+1 guarda quanto viene utilizzato dopo ogni GC completo. Puoi attivarne di aggiuntivi se ne hai bisogno, ma una mancanza di GC completi indica che non hai un problema (o che la tua perdita è molto lenta) –