Question

Cette question est portée limitée générations HotSpot . Est-il possible de trouver dans programme quelle génération une vie instance particulière. Les données telles que:

  • Jeune ou ancienne génération?
  • Si jeune, cet espace de survie?
  • l'intérieur TLAB? Quel fil?

Toute technique (ex, BTrace , JVMTI ) fonctionne aussi longtemps que je peux faire quelque chose comme ceci:

Object x = new Object();
HotSpotGenerationInfo info = HotSpotGenerationUtil.getInfo(x);

Mendiants ne peut pas être choosers mais idéalement je pourrais apprendre aussi lorsque l'instance d'intérêt a été déplacé d'une génération à une autre au moment où il arrive (c.-à-rappel d'un événement basé - pas intéressé dans le délai et les frais généraux implicite dans les sondages.)

Pas intéressé dans les réponses qui disent simplement « non » sans justification :)

Était-ce utile?

La solution

Pour autant que je sache, vous ne pouvez pas directement requête qui pool de mémoire un objet vit actuellement. Cependant, les objets sont promus à un pool de mémoire différente par une course de collecte des ordures, et vous pouvez interroger le nombre majeur / mineur gc fonctionne depuis VM commencent à utiliser JMX. Si vous prenez en outre note de ces compteurs lorsque l'objet est créé, vous pouvez reconstruire s'il y avait un GC depuis et de ce qui mutualisent la vie d'objet dans.

Autres conseils

Il y a une complication supplémentaire à « compter le nombre de GCS depuis l'objet a été créé » approche - il ne prend pas en compte la promotion de l'objet prématurée .

Si les espaces de survie sont fondamentalement trop petite, et la pression de la mémoire de l'Eden (à savoir le taux d'objets survivants au moins une fois) est élevé, alors des objets sera promu titularisé avant de toucher le plein seuil d'occupation.

Dans les exemples réels, les applications en bonne santé ont en général des pourcentages non nuls de promotion prématurée. En fait, un taux de promotion prématurée 0% est un signe vraiment mauvais - il est dit que vos espaces de survie sont beaucoup, beaucoup trop grand et vous perdez beaucoup de mémoire

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top