我正在检测dalvik VM,我想知道是否有任何工具可以分析Dalvik中的垃圾收集。我知道分配跟踪器,但我正在寻找更详细的东西。
发布于 2013-08-08 22:48:35
获取一段时间内所有GC操作的日志:
每次发生GC时,您的LogCat中都会有一行代码。
08-08 16:42:21.998: D/dalvikvm(26942): GC_CONCURRENT freed 773K, 26% free 4739K/6368K, paused 4ms+3ms, total 92ms
08-08 16:42:21.998: D/dalvikvm(26942): WAIT_FOR_CONCURRENT_GC blocked 11ms似乎我的设备上的所有应用程序都得到了这些。
这一行包含许多关于GC的有趣统计数据,比如释放的内存量、GC花费的时间、确切的发生时间以及堆的大小(已用/总)。
分析GC的特定运行的:
如果您想分析在一个特定的GC操作中发生了什么,那么最好的工具就是Eclipse MAT。Eclipse MAT可以解析堆转储。拍摄堆快照,等待GC (或使用DDMS自己触发),然后拍摄另一个快照。
Eclipse MAT可以显示两个快照之间的增量。请注意,您将看到新的分配和GC引起的释放。有关比较快照的更多信息,请访问available here。
一些其他想法:
我不确定您能从分析GC过程中学到多少东西。GC的内部工作原理是一个实现细节。它可以在不同的操作系统版本/设备/配置之间更改,而无需另行通知。
我正在努力想办法改善你正在经历的GC延迟。在我看来,GC通常在内存条件较低时运行。这可能发生在新的分配期间,因此GC可能会在您的服务处于活动状态时运行。为了尝试这样做,我会添加一个简单的后台计时器,并在我的服务变为活动状态(新请求)时重置它。当计时器滴答作响(一段时间不活动)时,我会手动运行System.gc()。
https://stackoverflow.com/questions/6433074
复制相似问题