Domanda

Per favore fatemi sapere qual è il modo migliore per determinare la composizione della memoria giovani generazioni promosso vecchia generazione, dopo ogni evento giovane GC?

Idealmente mi piacerebbe sapere i nomi delle classi che sono responsabili per esempio, per l'80% del cumulo in ogni "giovane gen -> vecchia generazione" promozione pezzo;

Esempio: ho 600M giovane generazione, ogni mandato promuove 6M; Vorrei sapere quali oggetti compongono questo 6M.

Grazie.

È stato utile?

Soluzione

Non c'è un modo semplice per fare questo, però, mi è stato di recente analizzando le prestazioni della memoria di grandi applicazioni java, e posso condividere alcune esperienze.

Ecco come ho trovato quello che gli oggetti sono stati promossi al vecchio Gen:

In primo luogo è necessario identificare quali oggetti sono in "di ruolo vecchio /" spazio. Questo è fondamentalmente si analisi standard java mucchio. Per questo vi consiglio jmap. Fa parte della JVM sole. correre: jmap -dump:file=heap.hprof PID per ottenere un heap dump. Questo farà una pausa JVM durante la discarica (~ per 30 secondi su un mucchio 2GB)

Ora caricare il file .prof in (lo strumento migliore per questo, mani verso il basso) Vorrei trascorrere una giornata a giocare con analizzatore di memoria di capire, guardare lo screencam (ha bisogno di un account di accesso, ma vale la pena).

Ora si sa che cosa gli oggetti sono nel vostro mucchio.

Ecco il trucco: Nella schermata panoramica di analizzatore di memoria, c'è un link a: "gli oggetti non raggiungibili istogramma". Ora, questi oggetti sono tutti da raccogliere durante la prossima GC. Ma alcuni sono probabilmente in Eden, alcuni in sopravvissuto e un po 'di vecchio.

Ora, un po 'con la memoria profiler profiling capacità, preferisco YourKit. Eseguire la vostra applicazione con YourKit e registrare allocazione degli oggetti.

Esegui e creazione di record oggetto. Una volta che avete una lista di oggetti dell'uso creato tutte e tre le liste per avere un quadro di quello che sta succedendo. Non quello che gli esseri umani fanno meglio, vedere i modelli.

  • Quali oggetti vengono creati e sono raggiungibili. (Analizzatore di memoria)
  • Oggetti irraggiungibile in mucchio (analizzatore di memoria)
  • Gli oggetti creati durante una corsa (Profiler)

Un altro modo per avvicinarsi è YourKit generazioni vista . È possibile scattare istantanee del mucchio e confrontare ciò che gli oggetti sono ancora in vita tra le istantanee. Se si utilizza questo con visualgc è possibile determinare per quanto tempo un oggetto deve essere vivo per essere promosso al vecchio Gen, e prendere istantanee a questi intervalli per vedere quali oggetti sono ancora vivi.

Beh, buona fortuna. / JT

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