我的记录中有以下信息,
GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms
我正在理解最后一个值“total”。我已经在网站上查看了其他与GC相关的问题,它们要么有与并发GC相关的两个暂停,要么有单个非并发GC的总暂停。为什么我有两个?我的应用程序是暂停了5+9毫秒还是378毫秒?“total”到底是什么意思?
我的记录中有以下信息,
GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms
我正在理解最后一个值“total”。我已经在网站上查看了其他与GC相关的问题,它们要么有与并发GC相关的两个暂停,要么有单个非并发GC的总暂停。为什么我有两个?我的应用程序是暂停了5+9毫秒还是378毫秒?“total”到底是什么意思?
GC_CONCURRENT
: 在堆增长时触发,因此可以及时回收内存,以使堆不需要扩大。
GC_CONCURRENT
释放了456K的内存。
这一部分告诉您此GC扫描释放了多少内存。
GC_CONCURRENT
释放了456K, 占用了19%的2753K/3360K空间。
这一部分告诉您堆中有多少%的空闲空间、活动对象的大小和堆总大小。因此,在上面的示例中,19%的空闲空间中使用了2753K的内存,堆总大小为3360K。
日志的最后一部分告诉您GC花费的时间。在GC_CONCURRENT
集合中,您将看到2个时间:一个是集合开始时,另一个是集合结束时。
对于非并发GC事件,只有一个暂停时间,通常要大得多。例如,暂停了378毫秒。
来源:
https://sites.google.com/site/pyximanew/blog/androidunderstandingddmslogcatmemoryoutputmessages
另一个清晰解释的地方...
从我看过的一些系统跟踪信息来看,总时间(378毫秒)并不反映垃圾回收实际暂停您的应用程序的时间。它反映了垃圾回收所花费的时间。你应该查看暂停时间。
http://www.youtube.com/watch?v=_CruQY55HOk。
看一下大约17分钟的视频。这个人详细解释了logcat消息。
GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms
GC_CONCURRENT : Jumps in because Heap is growing
19% free 2753K/3360K After this collection 19% of memory is free. Check the heap usage.paused 5ms+9ms Time taken to collect garbage. Total pause time is 378ms.