当我在 Android Studio 中分析应用程序的内存时,我可以看到不同类别的内存消耗情况,
但是当我转储 Java 堆(中间按钮)时,我只得到堆的分配,
这是预期的按钮名称。但到目前为止我仍然可以看到分配的 char 数组和字符串,但正如我们所知,在最近的版本中,String 中的 char 数组被移动到 native 堆并且 String 类只能通过 native 方法访问它们,所以事实证明这个堆转储显示也是 native 堆。我对吗?图形堆呢?
最佳答案
虽然它无论如何都不是权威来源,但我和其他人试图解释 java 内存使用 here .据我所知(使用 ART 或 Davlik 的人可以给你一个更明确的答案)整个应用程序只有一个堆可用,没有特定的图形堆。
Android Studio 可能向您展示的是图形操作消耗了多少堆。类似于堆栈(绿色)内存段向您显示当前调用堆栈正在消耗的内容。您可以通过突出显示一个段来查看这如何反射(reflect)在您的代码中:
当您使用此 View 时,您应该记得从下拉列表中选择您的应用程序堆:
native 和 Java 部分向您展示了有多少内存是通过 SDK/Java 框架直接分配的,以及有多少是通过底层结构 native 分配的。 (他们不会在您的应用程序中向您显示不同的内存区域,这看起来可能令人困惑 - 请参阅末尾的链接)
有关分析器向您展示的内容的最佳概述在 Developer Documentation 中。它还概述了系统镜像和合子堆对您来说是什么。
关于android - 如何在 Android Studio 3.0 中查看 native 内存和图形内存的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46647360/