Android:跟踪创建的对象数

Android:跟踪创建的对象数,android,garbage-collection,debugging,profiling,allocation,Android,Garbage Collection,Debugging,Profiling,Allocation,我正在将一个游戏移植到Android上(有很多代码,只有很少一部分是我的),DalvikVM(通过LogCat)告诉我所有关于垃圾收集的事情。在代码中的某个时刻,我得到了一个“GC-freedx-objects/x-ms”消息流,基本上告诉我大约150000个对象刚刚被删除,这需要整整一秒钟的时间 我想知道这些是从哪里来的!我很确定我不是故意创建那么多对象的 那么,有没有办法。。。基本上与这个信息相反?在创建任何对象时打印日志消息的东西 这样我就可以跳过代码,检查生成了多少条消息,并查看代码的哪

我正在将一个游戏移植到Android上(有很多代码,只有很少一部分是我的),DalvikVM(通过LogCat)告诉我所有关于垃圾收集的事情。在代码中的某个时刻,我得到了一个“GC-freedx-objects/x-ms”消息流,基本上告诉我大约150000个对象刚刚被删除,这需要整整一秒钟的时间

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

那么,有没有办法。。。基本上与这个信息相反?在创建任何对象时打印日志消息的东西

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

如果相关的话,我正在使用
Eclipse3.4.2


有什么想法吗?

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


如果它没有出现在游戏中,那么你已经毫不费力地找到了答案,然后可以将注意力转向你的Android代码。不幸的是,我不太了解这一点。

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

当您创建一个对象的新实例时,您不能记录一条消息吗?嗯,是的,但我想在创建任何对象时记录一条消息。比如,甚至是矩形或字符串或。。。任何东西