2016-07-12 1 views
1

Dans ma demande, je vois que certains objets continuent de venir à l'ancienne génération:Comment comprendre quels objets survécurent n mineur GC

- age 1: 23911192 bytes, 23911192 total 
- age 2:  627816 bytes, 24539008 total 
- age 3:  60344 bytes, 24599352 total 
- age 4:  19488 bytes, 24618840 total 
- age 5:  12864 bytes, 24631704 total 
- age 6:  10632 bytes, 24642336 total 
- age 7:  11472 bytes, 24653808 total 
- age 8:  10944 bytes, 24664752 total 
- age 9:  39480 bytes, 24704232 total 
- age 10:  10288 bytes, 24714520 total 
- age 11:  8072 bytes, 24722592 total 
- age 12:  9976 bytes, 24732568 total 
- age 13:  13112 bytes, 24745680 total 
- age 14:  8928 bytes, 24754608 total 
- age 15:  8600 bytes, 24763208 total <-- who are these guys? 

Alors, je voulais vous demander quelle est la meilleure façon de savoir qui sont ces objets qui ont survécu 15 GC mineur? L'application fonctionne pendant une heure, il ne s'agit donc pas d'une période de préchauffage.

+0

pourquoi serait-il pertinent? Ce n'est qu'une fraction minuscule, ce n'est pas comme si cela allait déclencher une quantité excessive de collections de l'ancienne génération. – the8472

+0

@ the8472, cela peut ne pas avoir beaucoup d'importance. Je suis juste intéressé par ce qui se passe – evgeniy44

Répondre

0

Je ne suis pas au courant d'une option qui décompose les instances par âge tenure

Mais si nous demandons quels sont les objets en direct à l'âge de 16 ans plutôt, c'est des objets qui sont promus à l'ancienne génération. Qui peut être tracé avec -XX:+PrintClassHistogram. Différer les histogrammes après un GC complet et avant le prochain GC complet vous montrera quels objets ont saigné dans l'ancienne génération dans les jeunes collections entre les deux.

L'utilisation d'un profileur de mémoire prenant en charge les instantanés et leur comparaison peut fournir des informations similaires.

Pour java 9 unifié de l'enregistrement de l'option équivalente est -Xlog:classhisto*=trace