garbage-collection - 破译垃圾收集输出

标签 garbage-collection go

我正在使用

运行示例程序
rahul@g3ck0:~/programs/Remodel$ GOGCTRACE=1 go run main.go 
gc1(1): 0+0+0 ms 0 -> 0 MB 422 -> 346 (422-76) objects 0 handoff
gc2(1): 0+0+0 ms 0 -> 0 MB 2791 -> 1664 (2867-1203) objects 0 handoff
gc3(1): 0+0+0 ms 1 -> 0 MB 4576 -> 2632 (5779-3147) objects 0 handoff
gc4(1): 0+0+0 ms 1 -> 0 MB 3380 -> 2771 (6527-3756) objects 0 handoff
gc5(1): 0+0+0 ms 1 -> 0 MB 3511 -> 2915 (7267-4352) objects 0 handoff
gc6(1): 0+0+0 ms 1 -> 0 MB 6573 -> 2792 (10925-8133) objects 0 handoff
gc7(1): 0+0+0 ms 1 -> 0 MB 4859 -> 3059 (12992-9933) objects 0 handoff
gc8(1): 0+0+0 ms 1 -> 0 MB 4554 -> 3358 (14487-11129) objects 0 handoff
gc9(1): 0+0+0 ms 1 -> 0 MB 8633 -> 4116 (19762-15646) objects 0 handoff
gc10(1): 0+0+0 ms 1 -> 0 MB 9415 -> 4769 (25061-20292) objects 0 handoff
gc11(1): 0+0+0 ms 1 -> 0 MB 6636 -> 4685 (26928-22243) objects 0 handoff
gc12(1): 0+0+0 ms 1 -> 0 MB 6741 -> 4802 (28984-24182) objects 0 handoff
gc13(1): 0+0+0 ms 1 -> 0 MB 9654 -> 5097 (33836-28739) objects 0 handoff
gc1(1): 0+0+0 ms 0 -> 0 MB 209 -> 171 (209-38) objects 0 handoff

帮助我理解第一部分,即

0 + 0 + 0 => Mark + Sweep + Clean times

422 -> 346 是否意味着内存已从 422MB 清理到 346MB? 如果是,那么为什么在没有要清理的情况下减少内存?

最佳答案

在 Go 1.5 中,此输出的格式发生了很大变化。如需完整文档,请前往 http://godoc.org/runtime并搜索“gctrace:”

gctrace: setting gctrace=1 causes the garbage collector to emit a single line to standard
error at each collection, summarizing the amount of memory collected and the
length of the pause. Setting gctrace=2 emits the same summary but also
repeats each collection. The format of this line is subject to change.
Currently, it is:
    gc # @#s #%: #+...+# ms clock, #+...+# ms cpu, #->#-># MB, # MB goal, # P
where the fields are as follows:
    gc #        the GC number, incremented at each GC
    @#s         time in seconds since program start
    #%          percentage of time spent in GC since program start
    #+...+#     wall-clock/CPU times for the phases of the GC
    #->#-># MB  heap size at GC start, at GC end, and live heap
    # MB goal   goal heap size
    # P         number of processors used
The phases are stop-the-world (STW) sweep termination, scan,
synchronize Ps, mark, and STW mark termination. The CPU times
for mark are broken down in to assist time (GC performed in
line with allocation), background GC time, and idle GC time.
If the line ends with "(forced)", this GC was forced by a
runtime.GC() call and all phases are STW.

关于garbage-collection - 破译垃圾收集输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20551748/

相关文章:

algorithm - 使用非常大的字典进行垃圾收集

java - WeakReferences、Weakashmaps、softreferences 的用途是什么?

JavaScript、内存泄漏、垃圾收集。尝试简单的出路?

Golang 事件 : EventEmitter/dispatcher for plugin architecture

java - 如果不需要那么多,是否应该限制 Java 堆大小?

garbage-collection - 如何更改 Kubernetes 垃圾回收阈值

go - 在 http.ResponseWriter 刷新/结束时执行处理函数?

go - 如何有效地在 golang 中存储对文件的 html 响应

api - beego评论路由器

hash - Golang md5 Sum() 函数