]> Cypherpunks.ru repositories - gostls13.git/commit
runtime: make runtime.GC() trigger a concurrent GC
authorAustin Clements <austin@google.com>
Fri, 24 Feb 2017 02:50:19 +0000 (21:50 -0500)
committerAustin Clements <austin@google.com>
Fri, 31 Mar 2017 01:15:21 +0000 (01:15 +0000)
commit9ffbdabdb02c1fd95eabee82457aaa0dd79d46ac
treef3797038467a14f8793b0b37f99e91489e7a83ee
parent44ed88a5a768a54c1880c58f3438bf2fa8639c4c
runtime: make runtime.GC() trigger a concurrent GC

Currently runtime.GC() triggers a STW GC. For common uses in tests and
benchmarks, it doesn't matter whether it's STW or concurrent, but for
uses in servers for things like collecting heap profiles and
controlling memory footprint, this pause can be a bit problem for
latency.

This changes runtime.GC() to trigger a concurrent GC. In order to
remain as close as possible to its current meaning, we define it to
always perform a full mark/sweep GC cycle before returning (even if
that means it has to finish up a cycle we're in the middle of first)
and to publish the heap profile as of the triggered mark termination.
While it must perform a full cycle, simultaneous runtime.GC() calls
can be consolidated into a single full cycle.

Fixes #18216.

Change-Id: I9088cc5deef4ab6bcf0245ed1982a852a01c44b5
Reviewed-on: https://go-review.googlesource.com/37520
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
src/runtime/mgc.go
src/runtime/mprof.go