Question

S'il vous plaît laissez-moi savoir quelle est la meilleure façon de déterminer la composition de la mémoire de la jeune génération promu à l'ancienne génération, après chaque événement jeune GC?

Idéalement, je voudrais savoir les noms de classe qui sont par exemple responsables, 80% des tas dans chaque « jeune génération -> vieux gen » morceau de promotion;

Exemple: Je 600M jeune génération, chaque régime favorise 6M; Je veux savoir quels objets composent cette 6M.

Merci.

Était-ce utile?

La solution

Il n'y a pas moyen facile de cependant, cela, j'ai récemment l'analyse des performances de la mémoire des grandes applications java, et peut partager une certaine expérience.

Voici comment j'ai trouvé ce que les objets sont promus à l'ancienne génération:

Vous devez d'abord identifier les objets sont dans l'espace « vieux / titularisés ». Ceci est essentiellement vous analyse standard de tas java. Pour cela, je recommande jmap. Il fait partie du soleil jvm. courir: jmap -dump:file=heap.hprof PID pour obtenir une décharge de tas. Cela fera une pause pendant la jvm la décharge (~ pendant 30 secondes sur un tas de 2 Go)

Maintenant charger le fichier .prof dans (le meilleur outil pour cela, les mains vers le bas) Je passer une journée à jouer avec analyseur de mémoire pour le comprendre, regarder le screencam (a besoin d'une connexion, mais vaut le coup).

Maintenant, vous saurez quels objets sont dans votre tas.

Voici l'astuce: Dans l'écran d'aperçu de l'analyseur de mémoire, il y a un lien vers: « histogramme des objets injoignables ». Or, ces objets sont tous à percevoir lors de la prochaine GC. Mais certains sont probablement eden, certains en survivant et certains dans la vieille.

Maintenant, obtenir une profileur avec une capacité de profilage mémoire, je préfère YourKit. Lancez votre application avec l'allocation d'objets YourKit et enregistrer.

Exécuter et création d'objets d'enregistrement. Une fois que vous avez une liste d'objets créés utiliser les trois listes pour obtenir une image de ce qui se passe. Faites ce que les humains font le mieux, voir les modèles.

  • Quels objets sont créés et sont accessibles. (Analyseur de mémoire)
  • Objets inatteignable en tas (analyseur de mémoire)
  • Les objets créés lors d'une course (Profiler)

Une autre façon d'aborder est YourKit générations voir . Vous pouvez prendre des photos de votre tas et comparer ce que les objets sont encore en vie entre les instantanés. Si vous utilisez ce avec visualgc vous pouvez déterminer combien de temps un objet doit être en vie pour être promu à l'ancienne génération, et de prendre des clichés à ces intervalles pour voir quels objets sont encore en vie.

Eh bien, bonne chance. / JT

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