diff options
| author | Austin Clements <austin@google.com> | 2017-01-09 11:35:42 -0500 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2017-03-31 01:15:06 +0000 |
| commit | 29be3f1999d1ccf01110f4e1f2d628f54f6c65da (patch) | |
| tree | 3a1f4561bda7cbcc5133242a70c3482cc25d68c2 /src/runtime/malloc.go | |
| parent | 640cd3b3220f7a06820365e53f8fc6cb0acd1b20 (diff) | |
| download | go-29be3f1999d1ccf01110f4e1f2d628f54f6c65da.tar.xz | |
runtime: generalize GC trigger
Currently the GC triggering condition is an awkward combination of the
gcMode (whether or not it's gcBackgroundMode) and a boolean
"forceTrigger" flag.
Replace this with a new gcTrigger type that represents the range of
transition predicates we need. This has several advantages:
1. We can remove the awkward logic that affects the trigger behavior
based on the gcMode. Now gcMode purely controls whether to run a
STW GC or not and the gcTrigger controls whether this is a forced
GC that cannot be consolidated with other GC cycles.
2. We can lift the time-based triggering logic in sysmon to just
another type of GC trigger and move the logic to the trigger test.
3. This sets us up to have a cycle count-based trigger, which we'll
use to make runtime.GC trigger concurrent GC with the desired
consolidation properties.
For #18216.
Change-Id: If9cd49349579a548800f5022ae47b8128004bbfc
Reviewed-on: https://go-review.googlesource.com/37516
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
Diffstat (limited to 'src/runtime/malloc.go')
| -rw-r--r-- | src/runtime/malloc.go | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go index 344771c899..188b0453df 100644 --- a/src/runtime/malloc.go +++ b/src/runtime/malloc.go @@ -764,8 +764,10 @@ func mallocgc(size uintptr, typ *_type, needzero bool) unsafe.Pointer { assistG.gcAssistBytes -= int64(size - dataSize) } - if shouldhelpgc && gcShouldStart(false) { - gcStart(gcBackgroundMode, false) + if shouldhelpgc { + if t := (gcTrigger{kind: gcTriggerHeap}); t.test() { + gcStart(gcBackgroundMode, t) + } } return x |
