Domanda

Sono curioso di sapere quale sia il significato esatto di " commit " la memoria è quando il valore viene richiesto dalla classe MemoryUsage. Quella classe lo spiega come "commit" rappresenta la quantità di memoria (in byte) che è garantita per essere disponibile per l'uso dalla macchina virtuale Java. & Quot; Questo significa che la memoria è utilizzata dal processo jvm e NON è disponibile per altri processi fino a quando non viene rilasciata dal processo java, oppure significa che il processo java avrà successo se tenta di allocare fino a quella quantità di memoria ? Mi rendo conto che questo potrebbe essere specifico dell'implementazione, ma sono interessato solo all'hotspot.

È stato utile?

Soluzione

La dimensione del commit è la memoria effettivamente allocata, la dimensione utilizzata è la dimensione utilizzata per l'archiviazione dei dati effettivi (quando usato ~ = il commit è il momento per il GC principale e possibilmente facendo crescere l'heap). La dimensione massima è il limite massimo a cui può crescere l'heap - se non è sufficiente, la JVM genera OutOfMemoryError.

Se viene impegnata una memoria, allora può sicuramente essere utilizzata. Inoltre, l'unica occasione in cui JVM non sarebbe in grado di impegnare più memoria (su un sistema operativo moderno) è se l'hardware ha esaurito la memoria virtuale.

Tutte queste dimensioni indicano solo la dimensione della regione dell'heap. La JVM ha anche altre aree di memoria (stack di thread, cache JIT, ecc.) La regione heap è generalmente più grande, questo corrisponde all'incirca all'impronta del processo.

Due note:

  • se la dimensione del commit non rientra nella memoria fisica, parti di essa verranno scambiate nel file di paging. Questo porta a un grande rallentamento durante GC e in questi casi migliorerai le prestazioni dell'app riducendo le dimensioni dell'heap.
  • alcuni sistemi operativi consentono una doppia prenotazione della memoria - puoi allocare tutto ciò che vuoi finché non provi ad usarlo (dimenticato quale sistema operativo era - qualcuno mi riempia)

Altri suggerimenti

" Significa che la memoria è in uso dal processo jvm e NON è disponibile per altri processi " sarebbe quello corretto. Quindi è minore (o uguale a) la quantità di memoria che il sistema operativo vede come assunta dal processo JVM.

http://java.sun.com /j2se/1.5.0/docs/guide/management/jconsole.html (scusa se non ci sono ancore a cui collegarti).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top