GC#
逃逸分析#
输出逃逸分析日志:
$ go build -gcflags=-m main.go
传递两次可以显示更详细的信息:
$ go build -gcflags='-m -m' main.go
可能出现的 log 如下:
XXX escapes to heap
moved to heap: XXX
XXX does not escape
leaking param: XXX
XXX ignoring self-assignment in YYY = ZZZ
[1]can inline XXX
inlining call to XXX
参见
GC Trace#
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. The format of this line is subject to change.
Currently, it is:
gc # @#s #%`: #+#+# ms clock, #+#/#/#+# ms cpu, #->#-># MB, # MB goal, # MB stacks, #MB globals, # 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
# MB stacks
:estimated scannable stack size
# MB globals
:scannable global size
# P
:number of processors used
The phases are stop-the-world (STW) sweep termination, concurrent
mark and scan, and STW mark termination. The CPU times
for mark/scan 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. [2]
如果你有任何意见,请在此评论。 如果你留下了电子邮箱,我可能会通过 回复你。