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:跟踪创建的对象数的主要内容,如果未能解决你的问题,请参考以下文章