17.8 MiB堆分配用于简单的“Hello World”项目?

时间:2013-03-14 08:43:40

标签: android garbage-collection heap heap-memory eclipse-memory-analyzer

我猜这里有一个明显的答案......我对此感到困惑:

为什么我完成所有操作后会分配17.8 MiB堆内存:

  1. 使用Eclipse的 New Project 选项创建了一个简单的“Hello World”项目。
  2. 并添加了56 KiB背景图片。
  3. 如果我取出android:background="@drawable/background4"行,分配的内存将降至11.9 MiB。

    • 系统分配这么多内存是否正常?我应该担心吗?
    • 什么会占用这么多堆?

    我也对它进行了MAT报告,但我不确定从中得出什么结论:

    提前致谢,

3 个答案:

答案 0 :(得分:4)

  

并添加了56 KiB背景图片。

不,您添加了用作背景图像的56 KiB 文件

位图消耗的实际堆空间是每个像素三个字节。使用~6MB位图(根据您的MAT屏幕),您在相当高分辨率的设备或模拟器上运行您的应用程序(1080p应该导致~8MB,IIRC)。

答案 1 :(得分:1)

AFAIK Android会在您的布局膨胀时将布局中的图像转换为字节数组。

它需要扩展背景图像以适应您的屏幕,这需要额外的内存..这就是它分配那么多内存的原因。我可能不对,但如果我错了就告诉我。

答案 2 :(得分:0)

好吧,我在这里的数字可能有问题,但是Android 3以上的任何东西都会有24mb(之前为16mb,因设备而异)对内存堆的限制。与每个JVM一样,内存几乎全部分配,因此您的应用程序不需要在其生命周期内进行重新分配。

这并不是说您的应用程序实际上以24mb运行,但如果需要则分配它。

我知道您也可以增加应用程序可以使用的堆内存量,但我建议您重新访问代码,以备您认为有必要这样做。

显然,只要你的申请被关闭,所有这些都会被垃圾收集。

<强>更新 以下是如果需要增加堆的方法:

android:largeHeap="true"