android - 如何在 Android Studio 3.0 中查看 native 内存和图形内存的分配

标签 android android-studio memory profiling heap-memory

当我在 Android Studio 中分析应用程序的内存时,我可以看到不同类别的内存消耗情况,

enter image description here

但是当我转储 Java 堆(中间按钮)时,我只得到堆的分配,

enter image description here

这是预期的按钮名称。但到目前为止我仍然可以看到分配的 char 数组和字符串,但正如我们所知,在最近的版本中,String 中的 char 数组被移动到 native 堆并且 String 类只能通过 native 方法访问它们,所以事实证明这个堆转储显示也是 native 堆。我对吗?图形堆呢?

最佳答案

虽然它无论如何都不是权威来源,但我和其他人试图解释 java 内存使用 here .据我所知(使用 ART 或 Davlik 的人可以给你一个更明确的答案)整个应用程序只有一个堆可用,没有特定的图形堆。

Android Studio 可能向您展示的是图形操作消耗了多少堆。类似于堆栈(绿色)内存段向您显示当前调用堆栈正在消耗的内容。您可以通过突出显示一个段来查看这如何反射(reflect)在您的代码中:

enter image description here

当您使用此 View 时,您应该记得从下拉列表中选择您的应用程序堆:

enter image description here

native 和 Java 部分向您展示了有多少内存是通过 SDK/Java 框架直接分配的,以及有多少是通过底层结构 native 分配的。 (他们不会在您的应用程序中向您显示不同的内存区域,这看起来可能令人困惑 - 请参阅末尾的链接)

enter image description here

有关分析器向您展示的内容的最佳概述在 Developer Documentation 中。它还概述了系统镜像和合子堆对您来说是什么。

关于android - 如何在 Android Studio 3.0 中查看 native 内存和图形内存的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46647360/

相关文章:

c++ - 模块间共享内存

android - 需要更新 SQLite 中某列的值

Java Android SQLite数据库

android - google-services.json”已找到,但它表示您似乎无权访问的项目 ID

excel - 关闭工作簿时出现内存不足错误 - Excel VBA

php - Node.js 作为程序运行 vs php

android - 多次发布同一个应用

android - [ReactNative]DrawerLayoutAndroid 在使用堆栈导航器后行为异常

android - Android-错误:任务 ':app:transformClassesWithDexForRelease'的执行失败

Android Studio 3.1 不显示 "Transitions"类别