• Austin Clements's avatar
    runtime: document that runtime.GC() blocks until GC is complete · df2809f0
    Austin Clements authored
    runtime.GC() is intentionally very weakly specified. However, it is so
    weakly specified that it's difficult to know that it's being used
    correctly for its one intended use case: to ensure garbage collection
    has run in a test that is garbage-sensitive. In particular, it is
    unclear whether it is synchronous or asynchronous. In the old STW
    collector this was essentially self-evident; short of queuing up a
    garbage collection to run later, it had to be synchronous. However,
    with the concurrent collector, there's evidence that people are
    inferring that it may be asynchronous (e.g., issue #10986), as this is
    both unclear in the documentation and possible in the implementation.
    
    In fact, runtime.GC() runs a fully synchronous STW collection. We
    probably don't want to commit to this exact behavior. But we can
    commit to the essential property that tests rely on: that runtime.GC()
    does not return until the GC has finished.
    
    Change-Id: Ifc3045a505e1898ecdbe32c1f7e80e2e9ffacb5b
    Reviewed-on: https://go-review.googlesource.com/10488Reviewed-by: default avatarKeith Randall <khr@golang.org>
    Reviewed-by: default avatarRick Hudson <rlh@golang.org>
    df2809f0
mgc.go 49.3 KB