4
votes

Quelle est la métrique «nombre total» dans Android Studio Memory Profiler?

Je ne trouve aucune description de cette statistique dans la documentation destinée aux développeurs Android. Voici un lien vers ce que j'ai regardé le plus récemment: https://developer.android .com / studio / profile / memory-profiler

Voici ce que je pense que c'est: le nombre d'objets dans le tas qui n'ont pas été désalloués.

Veuillez, si possible, fournir une ressource crédible qui prend en charge votre raisonnement (par exemple, une conférence Google I / 0 sur Youtube avec une marque minute ou une documentation Android).

MODIFIER: Voici une capture d'écran qui comprend la métrique. entrez la description de l'image ici


2 commentaires

Pourriez-vous compléter la question avec une capture d'écran?


Capture d'écran ajoutée comme demandé.


3 Réponses :


0
votes

Voici ce que je pense que c'est: le nombre d'objets dans le tas qui ont n'a pas été désalloué.

Vous avez raison, mais je ne peux pas vous servir de fil de discussion public à ce sujet.


0 commentaires

0
votes

Oui, c'est le nombre total d'instances allouées avant la période sélectionnée + allocation de mémoire pour la période sélectionnée (ou comme vous le dites: nombre d'objets (instances) dans le tas qui n'ont pas été désalloués pour la période sélectionnée période)

Vous pouvez voir cela ici

Sur la vue d'instance, on peut voir que trois tableaux int ont été alloués à 1m, mais pas désalloués (pour la période sélectionnée).


0 commentaires

2
votes

La

colonne Total Count

Total Count est définie comme le nombre total d'objets (voir Source Android Studio ), en particulier:

Total Count = Snapshot objects + New allocations - New deallocations

Ce getTotalObjectCount () est défini comme :

if (isAllocation) {
  myDeltaAllocations++;
}
else {
  myDeltaDeallocations++;
}

Méthodes d'incrémentation

Le La valeur mySnapshotObjectCount est incrémentée à l'intérieur de addSnapshotInstanceObject , qui contient le commentaire utile:

Ajoutez une instance à l'instantané de base et mettez à jour la comptabilité de les valeurs "totales".

Les valeurs myDeltaAllocations et myDeltaDeallocations sont incrémentées à l'intérieur de addDeltaInstanceInformation :

  public int getTotalObjectCount() {
    return mySnapshotObjectCount + myDeltaAllocations - myDeltaDeallocations;
  }

Cela s'appelle à l'intérieur de la partition , qui contient le commentaire utile:

Partitionne les InstanceObjects dans snapshotInstances et myDeltaInstances selon la stratégie actuelle de ClassifierSet . Cela consommera les instances de l'entrée.

Cette snapshotInstance est la même que celle utilisée pour incrémenter mySnapshotInstanceObjectCount , montrant ainsi que les 3 valeurs sont très étroitement liées, sont créées lorsqu'une partition (snapshot ) est fait, et tous les facteurs dans le décompte total.


Formule finale

La réponse finale est donc:

  new AttributeColumn<>(
    "Total Count",
    () -> new SimpleColumnRenderer<ClassifierSet>(
      value -> Integer.toString(value.getAdapter().getTotalObjectCount()),
      value -> null,
      SwingConstants.RIGHT),
  • Objets instantanés = nombre d'instances d'objet allouées avant l'instantané.
  • Nouvelles allocations = nombre d'allocations lors de l'instantané.
  • Nouvelles désallocations = nombre de désallocations pendant l'instantané.

Cette définition de l'équation correspond à ce qu'Axifive a déclaré dans une autre réponse et à la vidéo associée.


4 commentaires

Travail fantastique! Pourriez-vous également fournir des explications sauvegardées par le code source pour les objets Snapshot , les nouvelles allocations et les nouvelles désallocations dans votre réponse? J'espère que vous avez fait vos recherches, mais j'aimerais laisser ma foi généreuse avec une preuve complète et pédantiquement écrite en ce qui concerne une réponse basée sur le code source comme la vôtre, et je ne me fais pas confiance pour comprendre pleinement le code source par moi-même.


@GrantPark Bien sûr. J'ai ajouté des informations sur la façon dont les 3 sont incrémentés, ainsi que sur la connexion entre eux. Si je vais plus loin, je crains d'expliquer le code ligne par ligne, mais faites-moi savoir tout autre domaine qui doit être amélioré! Merci pour le conseil.


Il est donc utile de voir où ces méthodes sont appelées ainsi que les commentaires pertinents, mais j'aimerais savoir comment ces éléments sont calculés, par exemple. le décompte des objets snapshot intègre-t-il le décompte de désallocation de l'objet avant le snapshot? Cela dit, j'apprécie sincèrement votre temps pour fouiller dans le code source du profileur - cela constitue une réponse forte étant donné qu'il n'y a pas de documentation appropriée.


Pour autant que je sache, c'est juste le nombre d'objets (donc les allocations / désallocations ne sont pas incluses), mais pas assez confiant à ce sujet pour les inclure dans la réponse. J'y reviendrai en rentrant du travail!