1
0
mirror of https://github.com/golang/go synced 2024-11-23 21:00:06 -07:00

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>
This commit is contained in:
Rick Hudson 2015-01-13 15:36:42 -05:00 committed by Austin Clements
parent 6cf5a733d5
commit 44529d9391

View File

@ -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.