Android 堆外内存管理
我正在为android开发一个应用程序,因为我们有很多图形,我们使用了很多内存 我监控内存堆大小及其大约3-4MB,当我做一些需要更多内存的事情时(然后返回到3),会看到5Mb。这没什么大不了的,但是其他一些事情是在堆内存之外处理的,比如加载可提取的内容 例如,如果我在eclipse外部运行ddms工具,并转到sysinfo,我会看到我的应用程序在Droid上占用20Mb,在G1上占用12 MB,但这两个应用程序的堆大小相同,因为数据相同,但图像不同 因此,问题是: 我如何知道是什么将内存带出了堆内存? 还有什么东西会占用堆内存之外的内存?复杂布局(大树)?动画 谢谢Android 堆外内存管理,android,memory,Android,Memory,我正在为android开发一个应用程序,因为我们有很多图形,我们使用了很多内存 我监控内存堆大小及其大约3-4MB,当我做一些需要更多内存的事情时(然后返回到3),会看到5Mb。这没什么大不了的,但是其他一些事情是在堆内存之外处理的,比如加载可提取的内容 例如,如果我在eclipse外部运行ddms工具,并转到sysinfo,我会看到我的应用程序在Droid上占用20Mb,在G1上占用12 MB,但这两个应用程序的堆大小相同,因为数据相同,但图像不同 因此,问题是: 我如何知道是什么将内存带出了
Daniel一个明显的候选对象是偏离屏幕的位图(android的双缓冲?),因为屏幕大小是droid上像素数的4倍左右。位图对象占用大量内存 例如,如果你的应用程序从网络下载一个10KB的jpg,并使用BitmapFactory将其解码成位图,位图对象需要大约30-100KB的内存,具体取决于图像的分辨率。每个像素3字节(每种颜色1字节) 是的,所有类型的对象都使用内存,如线性布局、图像视图等。。。如果您正在创建和销毁这些对象中的许多对象,例如,当您滚动/翻页图像时,将出现内存泄漏。gc()不能像我们希望的那样快速处理所谓的短期对象 *将视图对象的数量保持在稳定的水平**,并回收它们,而不是销毁和创建新对象 参考:
如果你的应用程序的内存达到20MB,可能是因为BitmapFactory正在尝试解码下一幅图像。谢谢,我正在寻找一种跟踪堆外内存的方法。