达尔维克垃圾收集工具

| 我正在检测Dalvik VM,并想知道在dalvik中是否有任何工具可以分析垃圾收集。我了解分配跟踪器,但我正在寻找更详细的信息。     
已邀请:
        获取一段时间内所有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花费了多长时间,确切发生的时间以及堆的大小(已使用/总计)。 由于所有这些日志行都带有标记“ 1”,因此您应该能够长时间收集和过滤它们,并进行分析以了解GC行为。 分析特定的GC运行: 如果要分析某个特定GC操作中发生的情况,那么最好的工具是Eclipse MAT。 Eclipse MAT可以解析堆转储。拍摄一个堆快照,等待GC(或使用DDMS自己触发它),然后拍摄另一个快照。 Eclipse MAT可以显示两个快照之间的差异。注意,您将看到新分配和GC引起的释放。有关比较快照的更多信息,请参见此处。 其他一些想法: 我不确定您将从分析GC流程中学到多少知识。 GC的内部运作是实施细节。可以在OS版本/设备/配置之间进行更改而无需另行通知。 我正在尝试思考改善您所经历的GC延迟的方法。在我看来,GC通常在内存不足的情况下运行。这可能在新分配期间发生,因此在您的服务处于活动状态时,GC可能正在运行。也许,如果您使用服务手动禁用GC的时间,则可以减少在响应Web请求的关键路径中发生GC的次数。为此,我将添加一个简单的后台计时器,并在我的服务变为活动状态(新请求)时将其重置。当计时器滴答作响(一段时间不活动)时,我将手动运行
System.gc()
。     

要回复问题请先登录注册