diff options
| author | Rick Hudson <rlh@golang.org> | 2015-01-13 15:36:42 -0500 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2015-01-21 16:19:48 +0000 |
| commit | 44529d939192c3034a04e2eff865d04ee51ae532 (patch) | |
| tree | 75168017ba7f73c776d30bd6e00df18cea34d37c /src/runtime/malloc.go | |
| parent | 6cf5a733d54dfbef47e908f91bf50d7180317325 (diff) | |
| download | go-44529d939192c3034a04e2eff865d04ee51ae532.tar.xz | |
runtime: fix trigger for concurrent GC
Adujst triggergc so that we trigger when we have used 7/8
of the available memory.
Change-Id: I7ca02546d3084e6a04d60b09479e04a9a9837ae2
Reviewed-on: https://go-review.googlesource.com/3061
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/runtime/malloc.go')
| -rw-r--r-- | src/runtime/malloc.go | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go index 223220a570..014b122b53 100644 --- a/src/runtime/malloc.go +++ b/src/runtime/malloc.go @@ -31,10 +31,12 @@ type pageID uintptr // base address for all 0-byte allocations var zerobase uintptr +// triggers the concurrent GC when 1/triggerratio memory is available to allocate. +// Adjust this ratio as part of a scheme to ensure that mutators have enough +// memory to allocate in durring a concurrent GC cycle. +var triggerratio = uint64(8) + // Determine whether to initiate a GC. -// Currently the primitive heuristic we use will start a new -// concurrent GC when approximately half the available space -// made available by the last GC cycle has been used. // If the GC is already working no need to trigger another one. // This should establish a feedback loop where if the GC does not // have sufficient time to complete then more memory will be @@ -44,7 +46,7 @@ var zerobase uintptr // A false negative simple does not start a GC, a false positive // will start a GC needlessly. Neither have correctness issues. func shouldtriggergc() bool { - return memstats.heap_alloc+memstats.heap_alloc*3/4 >= memstats.next_gc && atomicloaduint(&bggc.working) == 0 + return memstats.heap_alloc+memstats.heap_alloc/triggerratio >= memstats.next_gc && atomicloaduint(&bggc.working) == 0 } // Allocate an object of size bytes. |
