Terminologia Java heap: generazioni giovani, vecchie e permanenti?


Sto cercando di capire come i concetti di giovane, vecchie e generazioni permanenti nella terminologia Java heap, e più specificamente le interazioni tra le tre generazioni.

Le mie domande sono:

  • Che cos'è la giovane generazione?
  • Qual è la vecchia generazione?
  • Qual è la generazione permanente?
  • In che modo le tre generazioni interagiscono/si relazionano l'una con l'altra?
Author: Ravindra babu, 2010-01-25

8 answers

Questo sembra un malinteso comune. Nella JVM di Oracle, la generazione permanente non fa parte dell'heap. È uno spazio separato per le definizioni di classe e i dati correlati. In Java 6 e versioni precedenti, le stringhe internate venivano memorizzate anche nella generazione permanente. In Java 7, le stringhe internate vengono memorizzate nell'heap dell'oggetto principale.

Ecco un buon post sulla generazione permanente .

Mi piacciono le descrizioni fornite per ogni spazio nella guida di Oracle su JConsole:

Per la VM Java HotSpot, la memoria pool per la garbage collection seriale sono i seguenti.

  • Spazio Eden (heap) : il pool da cui viene inizialmente allocata la memoria per la maggior parte degli oggetti.
  • Survivor Space (heap): il pool contenente gli oggetti sopravvissuti la raccolta dei rifiuti dell'Eden spazio.
  • Tenured Generation (heap): il pool contenente oggetti esistenti per qualche tempo nel sopravvissuto spazio.
  • Generazione permanente (non-heap): Il pool contenente tutte le dati della macchina virtuale stessa, come oggetti di classe e metodo. Con VM Java che utilizzano la condivisione dei dati di classe, questa generazione è divisa in aree di sola lettura e lettura-scrittura.
  • Cache di codice (non-heap): la VM Java HotSpot include anche una cache di codice, contenente memoria utilizzata per compilazione e archiviazione di native codice.

Java utilizza generazionale raccolta dei rifiuti. Ciò significa che se hai un oggetto foo (che è un'istanza di qualche classe), più eventi di garbage collection sopravvive (se ci sono ancora riferimenti ad esso), più viene promosso. Inizia nella giovane generazione (che a sua volta è divisa in più spazi - Eden e Survivor) e alla fine finirebbe nella generazione di ruolo se sopravvivesse abbastanza a lungo.

 265
Author: Joshua McKinnon, 2013-09-23 19:54:06

L'Heap è diviso in giovani e vecchie generazioni come segue:

Giovane Generazione : È luogo dove ha vissuto per breve periodo e diviso in due spazi:

  • Spazio Eden : Quando l'oggetto viene creato utilizzando la nuova memoria parola chiave allocata su questo spazio.
  • Survivor Space : Questo è il pool che contiene oggetti che hanno sopravvissuto dopo java garbage collection da Eden space.

Vecchia generazione : Questo pool è fondamentalmente contiene di ruolo e virtuale spazio (riservato) e terrà quegli oggetti che sono sopravvissuti dopo la raccolta dei rifiuti dalle giovani generazioni.

  • Spazio di ruolo: Questo pool di memoria contiene oggetti sopravvissuti dopo più garbage collection significa oggetto sopravvissuto dopo garbage collection dallo spazio Sopravvissuto.

Generazione permanente: Questo pool di memoria come dice anche il nome contiene metadati di classe permanenti e informazioni descrittori così PermGen spazio sempre riservato per le classi e quelli che è legato alle classi per esempio membri statici.

Aggiornamento Java8: PermGen è sostituito con Metaspace che è molto simile.
La differenza principale è che Metaspace ridimensiona dinamicamente, cioè può espandersi in fase di runtime.
Spazio Metaspace Java: illimitato (predefinito)

Cache di codice (virtuale o riservato): Se si utilizza HotSpot Java VM questo include l'area della cache del codice che contiene la memoria che verrà utilizzata per la compilazione e l'archiviazione del codice nativo.

inserisci qui la descrizione dell'immagine

Per gentile concessione

 153
Author: Premraj, 2016-06-02 23:42:26

Che cos'è la giovane generazione?

La Giovane generazione è dove tutti i nuovi oggetti sono assegnati e invecchiati. Quando la giovane generazione si riempie, questo provoca una raccolta di rifiuti minore. Una giovane generazione piena di oggetti morti viene raccolta molto rapidamente. Alcuni oggetti sopravvissuti sono invecchiati e alla fine si spostano verso la vecchia generazione.

Qual è la vecchia generazione?

La Vecchia generazione viene utilizzata per memorizzare oggetti sopravvissuti a lungo. In genere, viene impostata una soglia per l'oggetto young generation e quando viene soddisfatta tale età, l'oggetto viene spostato nella vecchia generazione. Alla fine la vecchia generazione deve essere raccolta. Questo evento è chiamato maggiore garbage collection

Qual è la generazione permanente?

La Generazione permanente contiene i metadati richiesti dalla JVM per descrivere le classi e i metodi utilizzati nell'applicazione. La generazione permanente è popolata dalla JVM a runtime basato sulle classi in uso dall'applicazione.

PermGen è stato sostituito con Metaspace dal rilascio di Java 8.

I parametri PermSize & MaxPermSize verranno ignorati ora

In che modo le tre generazioni interagiscono/si relazionano l'una con l'altra?

inserisci qui la descrizione dell'immagine

Fonte immagine & oracle technetwork tutorial articolo: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

"Il processo generale di Garbage Collection " nell'articolo precedente spiega le interazioni tra loro con molti diagrammi.

Dai un'occhiata al diagramma di riepilogo:

inserisci qui la descrizione dell'immagine

 32
Author: Ravindra babu, 2016-10-01 13:34:08

La Java Virtual machine è organizzata in tre generazioni: una giovane, una vecchia e una permanente. La maggior parte degli oggetti viene inizialmente allocata nelle giovani generazioni. La vecchia generazione contiene oggetti che sono sopravvissuti a un certo numero di raccolte di giovani generazioni, nonché alcuni oggetti di grandi dimensioni che possono essere allocati direttamente nella vecchia generazione. La generazione permanente contiene oggetti che la JVM trova convenienti per gestire il garbage collector, ad esempio oggetti che descrivono classi e metodi, nonché le classi e i metodi stessi.

 14
Author: Mark R, 2010-01-24 21:57:38

Questo articolo è un ottimo sondaggio sui garbage collector. Definisce i concetti di base e la terminologia della garbage collection e include molti disegni esplicativi. È un "must read" per chiunque sia interessato a come funziona l'allocazione automatica della memoria; leggerlo renderà molto più facile leggere e capire i vari documenti che altri hanno indicato.

(Ciò che manca a quel documento sono le informazioni sulla ricerca post-1993 sui garbage collector, soprattutto l'intera attività dei sistemi multi-core. Tuttavia, devi imparare a camminare prima di imparare a correre.)

 11
Author: Thomas Pornin, 2010-01-26 16:16:50

Supponendo che tu stia parlando di Sun JDK/OpenJDK, vedi la pagina sul sito web di OpenJDK su Storage Management . Ci sono un paio di link a ancora più informazioni in fondo.

 4
Author: Nicholas Riley, 2010-01-24 21:52:59

Anche se si tratta di messa a punto non posso resistere consiglia questo documento date un'occhiata al capitolo 3 e andare in profondità, se volete.

 3
Author: stacker, 2010-01-24 22:20:15

La memoria in SunHotSpot JVM è organizzata in tre generazioni: generazione giovane, vecchia generazione e generazione permanente.

  • Generazione giovane: gli oggetti appena creati sono assegnati ai giovani gen.
  • Vecchia generazione: se il nuovo oggetto richiede uno spazio heap più ampio, viene allocato direttamente nel vecchio gen. Anche gli oggetti che sono sopravvissuti a pochi cicli GC vengono promossi al vecchio gen, cioè casa di oggetti longevi nel vecchio gen.
  • Generazione permanente : La generazione permanente contiene oggetti che la JVM trova convenienti per gestire il garbage collector, come oggetti che descrivono classi e metodi, nonché le classi e i metodi stessi.

CORDIALI saluti: La gen permanente non è considerata parte dell'heap Java.

In che modo le tre generazioni interagiscono/si relazionano l'una con l'altra? Gli oggetti (tranne quelli grandi) vengono prima assegnati alle giovani generazioni. Se un oggetto rimane vivo dopo x no. di cicli di garbage collection viene promosso al vecchio / tenured gen. Quindi possiamo dire che il giovane gen contiene gli oggetti di breve durata mentre il vecchio gen contiene gli oggetti che hanno una lunga vita. Il gen permanente non interagisce con le altre due generazioni.

 0
Author: KrityAg, 2015-06-29 14:58:38