Android:跟踪创建的对象数

Posted

技术标签:

【中文标题】Android:跟踪创建的对象数【英文标题】:Android: Track number of objects created 【发布时间】:2010-10-23 00:36:39 【问题描述】:

我正在将游戏移植到 android(有很多代码,而我的代码很少),DalvikVM 正在(通过 LogCat)告诉我所有关于垃圾收集的信息。在代码中的某个时刻,我收到一条“GC 释放 x 个对象 / x 毫秒”消息流,基本上是通知我刚刚删除了大约 150,000 个对象,这需要整整一秒钟。

我想知道这些是从哪里来的!我很确定我不是故意创建那么多对象。

那么,有没有办法得到……基本上与该消息相反的信息?当任何对象创建时打印日志消息的东西?

这样我就可以跳过代码,检查生成了多少消息,并查看代码的哪些部分正在生成对象。我怀疑在循环的一部分中创建了某种形式的对象,但如果可能的话,这将是一种确定的简单方法。

如果相关,我正在使用Eclipse 3.4.2

有什么想法吗?

【问题讨论】:

当你创建一个对象的新实例时,你能不记录消息吗? 嗯,是的,但是我想在创建 any 对象时记录一条消息。就像,甚至 Rects 或 Strings 或...任何东西。 【参考方案1】:

这可以使用 Android 附带的 ddms 工具(不是 Eclipse 版本)。使用它,查看分配跟踪器选项卡。您可以开始跟踪所有对象的分配以及它们分配位置的堆栈跟踪。但是,此工具可以生成大量信息,而您想要的特定信息并不总是易于解析或查找。如果你有 Sun JVM 的版本,我会推荐使用 Kai 提到的工具,它们更发达。如果您必须在 Android 中执行此操作,使用分配跟踪器将为您提供一个开始。

【讨论】:

【参考方案2】:

您为什么不在 Sun JVM 上分析现有的游戏代码(假设您要移植 Java 游戏)?然后,您可以利用 JProfiler、Yourkit 等,查看正在清理哪些庞大的对象集。 (使用 -XX:+PrintGCDetails 查看 GC 运行的时间。)

如果事实证明它不在游戏中,那么您已经很轻松地发现了这一点,然后可以将注意力转移到您的 Android 代码上。不幸的是,我对此知之甚少。

【讨论】:

以上是关于Android:跟踪创建的对象数的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何让用户为其他被跟踪用户创建地理围栏?

如何停止在三星手机上创建过多的对象?

Android:是不是创建捆绑包[重复]

Android 上的定期前台位置跟踪

android如何计算每分钟的节拍数

android中的gps示例包括跟踪功能