我预计增加0.1MB,但实际上本地堆使用量增加了6MB。
下面是我的计算过程:
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
我检查了我的布局文件并添加了所有使用的drawable的大小,总大小为124 kb -> 0.121094 mb
那么到底是什么导致本机堆增加了6 MB?
如果有人要求,我可以放置布局文件,不知道是否有意义...只是一堆带有id和drawable的布局,正如我所说,我已经检查过了drawable的大小。
非常感谢提前...
编辑:这是解决方案,在我的情况下 - 为了总结反应和评论:我将图像存储在“drawable”文件夹中,并使用hdpi设备。解决方案:将图像放入文件夹drawable-hdpi中。原因:系统正在从“drawable”中拉伸我的图像以匹配hdpi分辨率,尽管它们已经具有hdpi分辨率。这使它们占用的内存比它们应该多出2倍以上。