为什么我的Android应用程序在启动时使用了这么多内存

时间:2011-04-15 20:30:19

标签: android memory memory-management out-of-memory

我一直在研究内存泄漏问题。

我从http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.html

在互联网上找到了封面流程

现在我的印象是这个应用程序导致我的outofmemory问题,它仍然可能与它有关。但是,除了启动画面外,我已删除了应用程序中的所有内容。没有其他活动。它没什么......

初始意图会加载启动画面活动。

我的应用程序使用了79%到83%的可用堆。这款手机给了我2.816M,我最后一次运行时显然分配了2.278M。

首先,3M的可用空间来运行应用程序似乎不是很多。然而,在初始启动时加载到内存中的2.2M似乎消耗了大量内存,而我正在做的唯一事情是加载一个活动,其中imageview指向一个在4k左右测量的图标资源......

我的应用程序如何/为什么一无所有地使用这么多内存,以及如何在启动时减轻80%的内存消耗。

我正在使用T-Mobile G2进行开发,除了这个应用程序和在机器人上运行的默认服务之外,我什么都没有运行。

这是我的一些内存转储信息

怀疑1

2,239 instances of "java.lang.Class", loaded by "<system class loader>" occupy 673,760 (35.83%) bytes.

Biggest instances:

class com.ibm.icu4jni.util.Resources$DefaultTimeZones @ 0x401dc878 - 166,600 (8.86%) bytes.
class android.text.Html$HtmlParser @ 0x4010de58 - 126,592 (6.73%) bytes.
class org.apache.harmony.security.fortress.Services @ 0x4007fd98 - 51,456 (2.74%) bytes.
class android.content.res.Resources @ 0x4004bb78 - 38,768 (2.06%) bytes.
class com.abc.AppData @ 0x44d1e040 - 26,872 (1.43%) bytes.


Keywords
java.lang.Class

怀疑2

7,072 instances of "java.lang.String", loaded by "<system class loader>" occupy 435,560 (23.16%) bytes. 

Keywords
java.lang.String

怀疑3

58 instances of "org.bouncycastle.jce.provider.X509CertificateObject", loaded by "<system class loader>" occupy 289,288 (15.38%) bytes. These instances are referenced from one instance of "java.util.Hashtable$HashtableEntry[]", loaded by "<system class loader>"

Keywords
org.bouncycastle.jce.provider.X509CertificateObject
java.util.Hashtable$HashtableEntry[]

正如您所看到的那样,系统似乎正在加载并使用我已经给出的所有内存。我怎么能让它给我更多的记忆。 3 megs并不是很适合。我试图展示一个图片库。

2 个答案:

答案 0 :(得分:1)

我过去遇到了内存泄漏,但没有安装android。在过去,我使用了eclipse内存分析器工具(第二个链接),我发现它非常有用。要使用它,您需要生成堆转储文件(或内存快照),博客文章告诉您如何执行此操作(第一个链接)。

http://www.andorfi.net/2011/03/memory-analysis-for-android-applications/

http://www.eclipse.org/mat/

答案 1 :(得分:0)