【问题标题】:android determine GC freed objectandroid确定GC释放的对象
【发布时间】:2010-11-03 05:44:13
【问题描述】:

我的 android 应用程序性能低。从 logcat 我发现耗时的因素是垃圾收集。它在每个 gc 中消耗至少 110 毫秒。 gc 经常出现。无论如何确定收集的对象?

【问题讨论】:

  • 这是在模拟器还是在真机上?
  • 希望你没有在任何地方使用运行时类来手动释放 gc
  • @khalos 这是真手机
  • 您如何看待 GC 需要 110 毫秒这一事实?
  • 从我的 logcat 我经常看到这种类型的行 11-03 11:39:33.830: DEBUG/dalvikvm(14614): GC freed 18683 objects / 590096 bytes in 110ms

标签: android garbage-collection


【解决方案1】:

在 DDMS 工具中,转到“分配跟踪器”选项卡。从列表中选择您的应用,然后单击“开始跟踪”。使用应用一段时间后,选择“获取分配”。

这将显示 512 个最近分配的列表,包括大小和堆栈跟踪。从这里你应该能够分辨出是什么消耗了内存并导致了 GC。

【讨论】:

  • 在我的应用程序中,对于每个触摸动作,调用扩展 asyncTask 的新内部类。我是否需要在每个触摸动作上构建新类?如果我将内部类创建为静态并调用该类而不是调用“new class.execute(parameter)”,我可以提高性能吗??
  • 我不知道。您可能想为此提出一个新问题。
【解决方案2】:

查看http://developer.android.com/videos/index.html中的视频

尤其是关于“让您的 UI 更快”的讨论,视频中展示了许多设计最佳实践。

它肯定会帮助您的应用程序运行得更快。

【讨论】:

  • 在我的应用程序中,我必须解析从服务器下载的 xml 文件。为了解析来自每个标签的数据,我使用了下面显示的方法 public void characters(char ch[], int start, int length) { if(in_mapData){ if(this.in_evtUrl){ myXmlDataSet.setExtractedEvtUrl(new String(ch,开始,长度)); } 每个标签内容读取都会调用这个方法。这是因为我经常使用 new String() 方法而进行垃圾收集的原因吗?如果是的话,给我一个替代这个方法..
  • 您必须跟踪您的方法以检查哪些产生了垃圾。仅通过代码很难找到它。您可以尝试使用不同的解析实现。
  • 我使用了一个扩展 DefaultHandler 的类来处理 xml 处理。在读取 xml 数据时,我得到了 char 数组。为了获取字符串,我必须通过调用 new String() 方法将其转换为字符串。我认为这是GC的原因。如果我将数据作为字符串获取,我可以解决这个问题吗???然后是用于将数据作为字符串获取的 xml 解析类。我正在使用 HTC wildfire 和 android 版本 2.1。
  • 检查这个问题以更好地讨论 Android 的 XML 解析器 stackoverflow.com/questions/1253788/…
【解决方案3】:

这对 Android GC 来说并不是一个奇怪的值。 ~100ms 和 ~500K 值相当平均,但这当然取决于项目规范。真正的问题在于代码导致调用 GC 的频率。

这是一个示例:如果您通过ListView 和一些自定义Adapters 实现列表,您可能会获得有史以来最差的性能和最好的性能,具体取决于您为它们编写代码的方式。如果您不优化列表并创建一个新视图(通过从.xml 文件中对其进行扩充),您将经常收到 GC 调用,这被认为是 UI 中的小问题或挂断。

确定导致 GC 问题的最佳方法是将其本地化。启动您的应用程序并一次使用它,同时监控 DDMS 的 GC 垃圾,然后查看哪个元素或 Activity 导致了大部分垃圾并从那里开始。

还可以尝试使用一些工具来监控内存使用情况。例如,如果您使用的是 Eclipse,那么有一个名为 MAT 的工具可以让您更深入地了解整个项目中的对象使用情况。

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多