Heap nativi e Java

La JVM conserva due aree di memoria, l'heap Java™ e l'heap nativo (o di sistema). Questi due heap hanno scopi diversi e sono mantenuti da meccanismi differenti.

L'heap Java contiene le istanze degli oggetti Java ed è spesso indicato come 'l' heap '. È l'heap Java gestito dalla raccolta dati inutilizzati ed è l'heap Java che viene modificato dalle impostazioni dell'heap della riga comandi. L'heap Java viene assegnato utilizzando mmap o shmat se è richiesto il supporto per pagine di grandi dimensioni. La dimensione massima dell'heap Java viene preassegnata durante l'avvio di JVM come un'area contigua, anche se l'impostazione della dimensione heap minima è inferiore. Questa assegnazione consente al limite della dimensione heap artificiale imposto dall'impostazione della dimensione heap minima di spostarsi verso il limite della dimensione heap effettiva con l'espansione heap. Per ulteriori informazioni, vedi Gestione della memoria in J9 VM reference .

L'heap di sistema o nativo viene assegnato utilizzando i meccanismi malloc e free sottostanti del sistema operativo e viene utilizzato per l'implementazione sottostante di particolari oggetti Java; ad esempio:
  • Oggetti Motif richiesti da AWT e Swing
  • Buffer per le routine di compressione dati, che sono lo spazio di memoria richiesto dalle librerie della classe Java per leggere o scrivere i dati compressi come file .zip o .jar.
  • Allocazioni Malloc per codice JNI dell'applicazione
  • Codice compilato generato dal compilatore JIT (Just In Time)
  • Thread da associare ai thread Java