2011-10-26 2 views
13

Ho scritto un'applicazione utilizzando Spring Batch. Posso vedere con VisualVM che la dimensione dell'heap è di circa 22 MB. Ma quando utilizzo Process Explorer (su Windows) per vedere quanta memoria viene utilizzata da esso, la differenza è grande (byte privati ​​- 71560K e working set - 80388K). Come spiegarlo? Quali sono le altre cose che usano questa memoria?Memoria totale utilizzata dal processo Java e dimensione heap

Grazie

risposta

2

non dimenticare lo spazio nativo (stack)! L'heap rappresenta solo oggetti, i thread/primitive occupano memoria aggiuntiva. Anche AFAIK, una volta che un processo occupa memoria, anche se i contenuti potrebbero essere raccolti, a volte non viene rilasciato nuovamente al sistema operativo. Inoltre, non sono sicuro di VisualVM, ma eclipse MAT mostra solo un heap che è "corrente" (non verrà raccolto automaticamente se GC è stato eseguito in quel momento). Potresti anche voler guardare jstat.

5

Sono presenti librerie condivise, stack di thread, perm gen, memoria diretta, file mappati in memoria.

Tuttavia, la JVM alloca la dimensione massima dell'heap all'avvio. La quantità utilizzata non ha importanza.