Domanda

Sono confuso con la generazione Heap, Young, Tenered e Perm.

Qualcuno potrebbe spiegare?

È stato utile?

Soluzione

Il Garbage Collector Java è indicato come a Raccoglitore di rifiuti generazionale.Gli oggetti in un'applicazione vivono per periodi di tempo variabili a seconda di dove vengono creati e di come vengono utilizzati.L'intuizione chiave qui è che l'utilizzo di diverse strategie di garbage collection per oggetti di breve e lunga durata consente di ottimizzare il GC in modo specifico per ciascun caso.

In parole povere, poiché gli oggetti "sopravvivono" a ripetute raccolte di rifiuti nel file Generazione giovane vengono migrati nel Generazione di ruolo.IL Generazione permanente è un caso speciale, contiene oggetti necessari alla JVM, che non sono necessariamente rappresentati nel programma, ad esempio oggetti che rappresentano classi e metodi.

Dal momento che Generazione giovane di solito conterrà molta spazzatura, è ottimizzato per eliminare molti oggetti inutilizzati in una volta.IL Generazione di ruolo poiché contiene oggetti che durano più a lungo, è ottimizzato per una rapida raccolta dei rifiuti senza sprecare molta memoria.

Con i miglioramenti nella tecnologia di garbage collection, i dettagli sono diventati piuttosto complessi e variano a seconda della JVM e di come è stata configurata.Dovresti leggere il documentazione per la JVM specifica che stai utilizzando se hai bisogno di sapere esattamente cosa sta succedendo.

Detto questo, esiste una semplice sistemazione storica che è comunque utile a livello concettuale.Storicamente il Generazione giovane sarebbe un raccoglitore di copie e il Generazione di ruolo essere un contrassegnare e spazzare il raccoglitore.UN raccoglitore di copie essenzialmente non paga alcun costo della CPU per eliminare la spazzatura, la maggior parte del costo è nel mantenimento degli oggetti attivi, il prezzo di questa efficienza è un maggiore utilizzo della memoria.UN contrassegnare e spazzare il raccoglitore paga un certo costo della CPU sia per gli oggetti attivi che per quelli inutilizzati, ma utilizza la memoria in modo più efficiente.

Altri suggerimenti

Java memoria heap è parte della memoria allocata per JVM dal sistema operativo. Ogni volta che creiamo oggetti che vengono creati all'interno mucchio in java .

spazio Java Heap è diviso in tre regioni o generazione per l'amor di garbage collection chiamata Young Generation, Vecchio o la generazione di ruolo e permanente Generation . generazione permanente è spazzatura raccolti durante pieno gc in hotspot JVM

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

Il Old Generation viene utilizzato per memorizzare lungo sopravvivere oggetti. 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 viene chiamato un grande garbage collection.

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 momento che Java 8 rilascio. & PermSize MaxPermSize parametri verranno ignorati ora. Dai un'occhiata questo articolo DZone da Pierre - Hugues Charbonneau da capire su Metaspace .

 entrare descrizione dell'immagine qui

Fonte immagine: http://www.oracle .com / webfolder / technetwork / tutorial / OBE / java / GC01 / index.html

Fare riferimento al medesimo articolo per ulteriori dettagli.

Tutti gli oggetti nel mucchio sopravvivono quando vengono riferimento. Quando sono non di più, il garbage collector (GC) sarà recuperare la loro memoria.

PermGen, Young e Tenured sono clasifications differenti di oggetti (o spazi nel mucchio dove possono essere).

PermGen: questi oggetti saranno sempre lì, non sono garbage collection. Classi oggetti sono lì, stringhe internate, ecc non so se c'è un GC lì (quando il sistema scarica le classi ... ma non è una cosa normale)

Giovani:. quando si crea un oggetto è qui

Titolare:. di un oggetto va a questa classificazione / categoria quando si sopravvive N GC passa (sopravvivere = pass GC, ma questo oggetto viene fatto riferimento in modo che non possa essere recuperato)

A seconda del GC utilizzato e alcuni parametrizzazione, GC passa più o meno spesso.

Poi la raccolta dei rifiuti può avere diversi approcci per maange oggetti nel mucchio. Questa classificazione di oggetti aiuta a farlo.

Ecco un altro eccellente (anche se a lungo) articolo su come sintonizzare / dimensioni i parametri GC, che può aiutare a capire ancora di più:

https://docs.oracle.com/ JavaSE / 8 / docs / note tecniche / guide / vm / gctuning /

Una lettura molto utile se si hanno problemi di GC e la necessità di saper leggere i log GC, o hanno bisogno di capire come funziona la vostra corrente di collettore GC.

Se si desidera collegare il monitoraggio remoto di un sistema in esecuzione per vedere l'utilizzo della memoria in tempo reale e GC corre controllare questo strumento out:

http://java.sun.com/performance/jvmstat/visualgc.html

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