Java 理解Android GC消息

Java 理解Android GC消息,java,android,garbage-collection,Java,Android,Garbage Collection,我的catlog上有以下消息 GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms 我试图弄清楚最后的总值。我检查了站点上其他与GC相关的问题,它们要么有两个与并发GC相关的暂停,要么有一个非并发GC的总暂停。为什么我有两个?我的应用程序暂停了5+9毫秒还是378毫秒?总数到底是多少?看看这个,它解释了垃圾收集消息等。 如果您需要更多关于内存管理的信息,请观看谷歌提供的这篇文章 观看视频约17分钟

我的catlog上有以下消息

GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms
我试图弄清楚最后的总值。我检查了站点上其他与GC相关的问题,它们要么有两个与并发GC相关的暂停,要么有一个非并发GC的总暂停。为什么我有两个?我的应用程序暂停了5+9毫秒还是378毫秒?总数到底是多少?

看看这个,它解释了垃圾收集消息等。
如果您需要更多关于内存管理的信息,请观看谷歌提供的这篇文章

观看视频约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.

GC\u CONCURRENT
:堆增长时触发。因此,它可以及时回收内存,因此堆不需要扩大

GC\u并发
释放456K

这部分告诉您此GC扫描释放了多少内存

GC_并发
释放456K,19%释放2753K/3360K

这一部分说明堆的空闲百分比、活动对象的大小以及堆的总大小。因此,在上面的示例中,19%的空闲空间,有2753k内存在使用,总堆大小为3360K

日志的最后一部分告诉您GC花费了多长时间。在
GC\u并发
集合中,您将看到2次。一个在收藏的开头,一个在结尾

对于并发GC事件上的
n
,只有一个暂停时间,而且通常要大得多。例如,暂停378ms

来源:

另一个可以清楚解释事情的地方


没有明确的答案,但从我得到的信息来看,GC\u CONCURRENT是一个在单独线程中运行的垃圾收集。这意味着,虽然运行总共需要X毫秒(在您的情况下是378毫秒),但实际运行的线程不会被阻塞那么长时间。它只会在并发垃圾收集过程的开始和结束时被阻塞一点(在您的示例中为5+9=14ms)

这种类型的垃圾收集是由JVM自动触发的,当它决定这是一个好时机时(通常是当堆增长到危险的高度时)。其他类型的GC,如GC_EXPLICIT(如果我没有弄错名称的话),在执行

gc()


在你的代码中。对于这种类型的垃圾收集,它只会报告一次(如Y ms),在这种情况下,在这种类型的GC进程完成之前,您的线程实际上会被阻塞一段时间。

通过查看我使用的一些系统争用,总时间(378ms)似乎并不反映GC实际暂停应用程序的时间。它确实反映了垃圾收集花了多长时间。暂停时间是您应该查看的时间。

正如我在问题上所说的,我已经在网站上查看了类似的问题。您链接的问题仍然不能回答我的问题。应用程序是否暂停了378毫秒?所有答案都假设一个时间值,我有两个。我也知道这段视频并观看了它。我知道这段视频,它解释了我已经知道的“暂停5ms+9ms”部分,但不是全部378。没有在文档中解释的总时间。378ms是总暂停时间我知道所有这些,您的来源没有解决这个问题。我有三个时间值不是两个我知道暂停5ms+9ms这部分意味着什么,但总共是多少?可能重复的