Android Studio的Memory Profiler中的“总数”指标是什么?

时间:2019-01-15 16:38:45

标签: android-studio memory memory-management memory-leaks heap-memory

我无法在Android开发人员文档的任何地方找到此指标的描述。这是我最近查看过的链接:https://developer.android.com/studio/profile/memory-profiler

这就是我认为的含义:堆中尚未释放的对象数。

如果可能,请提供可靠的资源来支持您的推理(例如,带有分钟标记的Android I / 0对话或一些Android文档)。

编辑:这是包含度量标准的屏幕截图。 enter image description here

3 个答案:

答案 0 :(得分:1)

是的,这是在选定时间段之前分配的实例总数+选定时间段的内存分配(或您所说的:堆中尚未为选定对象释放的对象(实例)数)期

您可以看到此here

在实例视图上,可以看到在{m}处分配了三个int数组,但未取消分配(在所选期间内)。

答案 1 :(得分:1)

“总数计数”列

Total Count定义为对象总数(请参阅Android Studio source),具体是:

  new AttributeColumn<>(
    "Total Count",
    () -> new SimpleColumnRenderer<ClassifierSet>(
      value -> Integer.toString(value.getAdapter().getTotalObjectCount()),
      value -> null,
      SwingConstants.RIGHT),

getTotalObjectCount() is defined as

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

递增方法

mySnapshotObjectCount值在addSnapshotInstanceObject内递增,其中有有用的注释:

  

将实例添加到基准快照并更新以下帐户的记帐   “总”值。

myDeltaAllocationsmyDeltaDeallocations的值递增inside addDeltaInstanceInformation

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

这称为inside partition,其中包含有用的注释:

  

根据当前的InstanceObjects策略在snapshotInstancesmyDeltaInstances中对ClassifierSet进行分区。这将消耗输入中的实例。

snapshotInstance与用于递增mySnapshotInstanceObjectCount的变量相同,因此表明创建分区(快照)时创建了所有3个值,它们之间的联系非常紧密,并且所有因素均计入“总计”计数。


最终公式

所以,最后的答案是:

Total Count = Snapshot objects + New allocations - New deallocations
  • 快照对象=快照之前分配的对象实例数。
  • 新分配=快照期间的分配数量。
  • 新的重新分配=快照期间的重新分配数量。

此等式的定义与Axifive在另一个答案中所说的以及所链接的视频相匹配。

答案 2 :(得分:0)

  

这就是我的想法:堆中具有   没有被释放。

您的想法是正确的,但是我不能为此公开话题。