Domanda

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

Le mie domande sono:

  • Qual è la giovane generazione?
  • Qual è la vecchia generazione?
  • Qual è la generazione permanente?
  • In che modo le tre generazioni interagiscono / riferiscono l'uno all'altro?
È stato utile?

Soluzione

Questo mi sembra un malinteso comune. In JVM Oracle, la generazione permanente non è parte del mucchio. Si tratta di uno spazio separato per definizioni di classi e dei relativi dati. In Java 6 e versioni precedenti, le stringhe internati sono stati memorizzati nella generazione permanente. In Java 7, stringhe internati vengono memorizzate nel mucchio oggetto principale.

Ecco un buon post su generazione permanente.

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

  

Per la HotSpot Java VM, la memoria   piscine per la raccolta dei rifiuti di serie   sono i seguenti.

     
      
  • Eden spaziale (cumulo): Il pool da cui memoria viene inizialmente allocata   per la maggior parte degli oggetti.
  •   
  • Survivor Spazio (heap): La piscina che contiene oggetti che sono sopravvissuti   la raccolta dei rifiuti del Eden   spazio.
  •   
  • Tenured Generation (heap): La piscina che contiene oggetti che sono esistiti   per qualche tempo nello spazio sopravvissuto.
  •   
  • Generazione permanente (non-heap): La piscina contenente tutte le riflettente   dati della macchina virtuale stessa,   come oggetti di classe e metodi. Con   Java VM che utilizzano la condivisione dei dati di classe,   questa generazione è diviso in   di sola lettura e di lettura-scrittura aree.
  •   
  • Codice Cache (non-heap): La HotSpot Java VM include anche una cache di codice,   contenente memoria utilizzata per   raccolta e conservazione dei nativi   codice.
  •   

Java utilizza garbage collection generazionale. Questo significa che se si dispone di un oggetto foo (che è un'istanza di una classe), gli altri eventi di raccolta dei rifiuti sopravvive (se ci sono ancora riferimenti ad esso), l'ulteriore che viene promosso. Si inizia nella giovane generazione (che a sua volta è suddivisa in spazi multipli - Eden e Survivor). E sarebbe alla fine finiscono nella generazione di ruolo, se è sopravvissuto abbastanza a lungo

Altri suggerimenti

  

Il mucchio è diviso in generazioni giovani e meno giovani nel seguente modo:

Young Generation : E 'luogo dove ha vissuto per breve periodo ed è suddiviso in due spazi:

  • Eden Spazio : Quando un oggetto creata usando nuova memoria allocata parola chiave in questo spazio.
  • Survivor Spazio : Questa è la piscina che contiene oggetti che hanno sopravvissuto dopo la raccolta dei rifiuti java dallo spazio Eden.

Old Generation : Questa piscina contiene essenzialmente di ruolo e virtuale    (Riservato) spazio e sarà in possesso di quegli oggetti che sono sopravvissuti    dopo la raccolta dei rifiuti da Young Generation.

  • Titolare Spazio:. Questo pool di memoria contiene oggetti che sono sopravvissuti dopo più raccolta dei rifiuti significa oggetto che è sopravvissuto dopo la garbage collection dallo spazio Survivor

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

  

Java8 Aggiornamento:. PermGen viene sostituito con Metaspace che è molto simile
  La differenza principale è che Metaspace ri-formati in modo dinamico vale a dire, è possibile espandere in fase di esecuzione.
  Java Metaspace spazio: senza limiti (di default)

Codice cache (virtuale o riservato): Se si utilizza HotSpot Java VM questo include prefisso cache che contiene la memoria che verrà utilizzato per la compilazione e lo stoccaggio di codice nativo

.

entrare descrizione dell'immagine qui

cortesia

  

Qual è la giovane generazione?

Young Generation è dove tutti i nuovi oggetti sono allocati e invecchiato. Quando la giovane generazione si riempie, questo provoca una garbage collection minore. Un giovane generazione piena di oggetti morti viene raccolto molto rapidamente. Alcuni sopravvissuti oggetti sono di età compresa e poi passare alla vecchia generazione.

  

Qual è la vecchia generazione?

vecchia generazione è usato per memorizzare gli oggetti lungo sopravviventi. In genere, una soglia è fissata per oggetto la generazione giovane e quando che l'età è soddisfatta, l'oggetto viene spostato alla vecchia generazione. Alla fine la vecchia generazione ha bisogno di essere raccolti. Questo evento è chiamato importante raccolta dei rifiuti

  

Qual è la generazione permanente?

generazione permanente contiene metadati richiesti da JVM per descrivere le classi ei metodi utilizzati nell'applicazione. La generazione permanente è popolato da JVM in fase di esecuzione basato su classi in uso presso l'applicazione.

PermGen è stato sostituito con Metaspace dal Java 8 rilascio.

& PermSize MaxPermSize parametri verranno ignorati ora

  

In che modo le tre generazioni interagiscono / riferiscono l'uno all'altro?

 entrare descrizione dell'immagine qui » loading=

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

" La collezione Processo Garbage generale " nel suddetto articolo spiega le interazioni tra di loro con molti schemi.

Date un'occhiata a schema riassuntivo:

 entrare descrizione dell'immagine qui

La macchina virtuale Java è organizzata in tre generazioni: una giovane generazione, una vecchia generazione, e una generazione permanente. La maggior parte degli oggetti sono inizialmente allocati nella giovane generazione. La vecchia generazione contiene oggetti che sono sopravvissute alcune serie di collezioni di giovani generazioni, così come alcuni oggetti di grandi dimensioni che possono essere allocati direttamente nella vecchia generazione. La generazione permanente contiene oggetti che la JVM considerate da conveniente avere garbage collector gestore, come oggetti che descrivono classi e metodi, nonché le classi ei metodi stessi.

Memoria in SunHotSpot JVM è organizzata in tre generazioni: giovani generazioni, di vecchia generazione e di generazione permanente.

  • Young Generation:. Gli oggetti appena creati vengono assegnati alla giovane generazione
  • vecchia generazione: se le nuove richieste di oggetti di uno spazio più grande mucchio, si arriva direttamente allocati nella vecchia gen. Anche gli oggetti che sono sopravvissuti alcuni cicli GC viene promosso alla vecchia generazione cioè vissuto a lungo casa oggetti nella vecchia gen.
  • Generazione permanente:. La generazione permanente contiene oggetti che la JVM considerate da conveniente avere garbage collector gestore, come oggetti che descrivono classi e metodi, nonché le classi ei metodi stessi

FYI:. Il gen permanente non è considerata una parte del mucchio Java

Come funziona il tre generazioni interagiscono / riferiscono l'uno all'altro?       Oggetti (tranne quelli grandi) vengono prima assegnati alle giovani generazioni. Se un oggetto rimane vivo dopo x n. dei cicli di raccolta della spazzatura che viene promosso al vecchio / di ruolo gen. Quindi possiamo dire che la giovane generazione contiene gli oggetti di breve durata, mentre la vecchia generazione contiene gli oggetti che hanno una lunga vita. Il gen permanente non interagisce con gli altri due generazioni.

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