【发布时间】:2012-07-03 15:17:01
【问题描述】:
当我预计增加约 0.1 MB 时,我发现本机堆使用量增加了 6 MB
我是如何得出这些数字的:
Log.d("test", "before setting layout");
showMemoryStats();
setContentView(R.layout.my_layout);
Log.d("test", "after setting layout");
showMemoryStats();
showMemoryStats 在哪里:
public static void showMemoryStats() {
Log.i("test", "----------------------------------------------------------------------------------------------------------------------------");
Log.i("test", "showing memory stats in xx");
double nativeUsage = Debug.getNativeHeapAllocatedSize();
Log.i("test", "nativeUsage: " + nativeUsage);
//current heap size
double heapSize = Runtime.getRuntime().totalMemory();
Log.i("test", "heapSize: " + heapSize);
//amount available in heap
double heapRemaining = Runtime.getRuntime().freeMemory();
Log.i("test", "heapRemaining: " + heapRemaining);
double memoryAvailable = Runtime.getRuntime().maxMemory() - (heapSize - heapRemaining) - nativeUsage;
Log.i("test", "memoryAvailable: " + memoryAvailable);
Log.i("test", "----------------------------------------------------------------------------------------------------------------------------");
}
输出:
07-03 16:50:40.127: D/test(18647): 设置布局之前
07-03 16:50:40.127: I/test(18647): ------------------------------- -------------------------------------------------- -------------------------------------------------------
07-03 16:50:40.127: I/test(18647): 显示 xx 中的内存统计信息
07-03 16:50:40.127: I/test(18647): nativeUsage: 5706008.0
07-03 16:50:40.127: I/test(18647): heapSize: 4905968.0
07-03 16:50:40.127: I/test(18647): heapRemaining: 1815456.0
07-03 16:50:40.127: I/test(18647): memoryAvailable: 2.4757912E7
07-03 16:50:40.127: I/test(18647): ------------------------------- -------------------------------------------------- -------------------------------------------------------
07-03 16:50:40.348: D/dalvikvm(18647): GC_EXTERNAL_ALLOC 释放 100K,49% 释放 2924K/5639K,外部 0K/0K,暂停 45ms
07-03 16:50:40.518: D/dalvikvm(18647): GC_EXTERNAL_ALLOC 释放 9K,49% 释放 2917K/5639K,外部 2700K/3371K,暂停 51ms
07-03 16:50:40.638: D/dalvikvm(18647): GC_EXTERNAL_ALLOC 释放 4K,49% 释放 2928K/5639K,外部 3952K/4356K,暂停 51ms
07-03 16:50:40.698: D/dalvikvm(18647): GC_EXTERNAL_ALLOC 释放 2K,48% 释放 2933K/5639K,外部 5963K/6027K,暂停 24ms
07-03 16:50:40.718: D/test(18647): 设置布局后
07-03 16:50:40.718: I/test(18647): ------------------------------- -------------------------------------------------- -------------------------------------------------------
07-03 16:50:40.718: I/test(18647): 显示 xx 中的内存统计信息
07-03 16:50:40.718: I/test(18647): nativeUsage: 1.2101904E7
07-03 16:50:40.718: I/test(18647): heapSize: 4734944.0
07-03 16:50:40.718: I/test(18647): heapRemaining: 1716432.0
07-03 16:50:40.718: I/test(18647): memoryAvailable: 1.8434016E7
07-03 16:50:40.718: I/test(18647): ------------------------------- -------------------------------------------------- -------------------------------------------------------
数学:
12101856 字节 - 5703424 字节 = 6398432 字节 = 6.10202 mb
我浏览了我的布局文件并添加了所有使用的可绘制对象的大小,总大小为 124 kb -> 0.121094 mb
那么到底是什么导致本机堆增加 6 mb?
我可以放布局文件,如果有人要求,不知道是否有意义...只是一堆带有 id 和 drawable 的布局,正如我所说的,我已经检查了 drawable 的大小。
提前非常感谢...
编辑:在我的情况下,这是解决方案 - 为了总结响应和 cmets:我将图像存储在“drawable”文件夹中并使用 hdpi 设备。解决方案:将图像放在文件夹 drawable-hdpi 中。原因:系统正在从“可绘制”中拉伸我的图像以匹配 hdpi 分辨率,尽管它们已经是 hdpi 分辨率。这使得它们占用的内存超过了应有的 2 倍。
【问题讨论】:
-
您是否正在使用可能使用更多内存的东西填充可绘制对象?你的drawable是什么?图片还是字段?
-
可绘制对象是位图或 XML 文件,它们引用位图来表示按下/可绘制状态。而已。填充:我正在填充动态数据,但在这些行之后。如您所见,有一个输出,然后是 setContentView,然后再次输出,中间没有其他内容。
标签: android android-layout memory