2017-09-28 4 views
4

Récemment, j'ai travaillé sur l'optimisation du code (en temps de calcul et en mémoire max requise). Pour savoir s'il y a un gain potentiel pour optimiser le coût de la mémoire, j'utilise JProfiler. TypiquementComment interpréter le graphique d'activité GC dans JProfiler?

  • s'il est élevé, je devrais essayer de réduire globalement
  • si elle est hérissée, je devrais essayer de réduire la création d'objet intermédiaire

Maintenant, je suis dans la deuxième situation, et le graphique de l'activité GC montre des pics mais tous sont inférieurs à 2% (voir l'image ci-dessous). Comment dois-je comprendre cela? Par défaut, je crois comprendre que la somme/intégrale de la courbe d'activité GC est une estimation du pourcentage total de cpu utilisé pour collecter des données. Donc, ici, cela signifierait beaucoup moins que le maximum 2%

C'est correct? Est-ce que je manque quelque chose?

enter image description here

+0

pouvez-vous ajouter une image? aussi, si vous voulez une interprétation plus détaillée de l'activité du GC, vous devez activer la journalisation gc et exécuter les choses via [gcviewer] (https://github.com/chewiebug/GCViewer) – the8472

+0

J'ai ajouté une image. Je ne suis pas au courant des fonctionnalités de journalisation de gc, que fait-il? Les journaux gc –

+0

fournissent des statistiques plus détaillées sur les performances générales du GC. jprofiler est plus adapté à l'analyse de graphes d'objets et de sites d'allocation. Par conséquent, si vous voulez avoir une meilleure idée du comportement agrégé, l'interprétation des journaux gc vous donnera plus de visibilité. Si vous voulez savoir ce qui est alloué, alors un profileur est le meilleur choix. – the8472

Répondre

2

Par défaut, je crois comprendre que la somme/integrale de la courbe d'activité de GC est une estimation du total de pour cent cpu utilisé pour recueillir des données.

Cela devrait être, oui.

donc ici que cela signifierait beaucoup moins que le maximum 2%

max est trompeur ici. Si vous faites un intervalle d'échantillonnage suffisamment petit, le maximum sera de 100% d'une tranche de temps consacrée à la GC. C'est quand cette tranche est plus petite qu'une durée de pause GC. Donc, ces pics sont déjà des moyennes sur des tranches de temps plus importantes.

Comment dois-je comprendre cela?

Votre application ne passe probablement pas beaucoup de temps sur le GC. Mais votre graphique ne couvre qu'une période relativement courte, il peut donc ne pas refléter des collections majeures ou des cycles concurrents. L'interprétation des journaux GC de la JVM fournira plus de détails si vous vous souciez de la latence et pas seulement du débit.

+0

merci pour la réponse. Ici j'optimise un morceau de code analytique, calcul pur sur un noyau. C'est le même code qui est appelé 1000 fois par l'application (distribuée). Je suppose que je vais regarder la journalisation gc lors de l'optimisation des applications. Notez qu'étrangement il y a 2-comportements (1er vs 2ème moitié) tandis que le graphique couvre 8 appel itératif au même code, avec seulement des différences quelques valeurs aléatoires d'entrée qui devraient changer seulement les valeurs de résultat, pas ce qui est calculé. –

4

Par défaut, je crois comprendre que la somme/integrale de la courbe d'activité GC est une estimation du total de cpu pour cent utilisé pour recueillir des données. Donc, ici, cela signifierait beaucoup moins que le maximum 2%

Est-ce correct?

Oui, c'est correct. Si vous voulez savoir où les objets temporaires sont attribués, allez à vivre Memory-> Allocation arbre d'appel et choisissez « objets déchets collectés » comme mode liveness

enter image description here

Pour voir le classé dans un lieu d'affectation ou allocation hot spot, utilisez l'analyse des arborescences d'appel "Afficher les classes".

enter image description here