mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: add scavenging code for new page allocator
This change adds a scavenger for the new page allocator along with tests. The scavenger walks over the heap backwards once per GC, looking for memory to scavenge. It walks across the heap without any lock held, searching optimistically. If it finds what appears to be a scavenging candidate it acquires the heap lock and attempts to verify it. Upon verification it then scavenges. Notably, unlike the old scavenger, it doesn't show any preference for huge pages and instead follows a more strict last-page-first policy. Updates #35112. Change-Id: I0621ef73c999a471843eab2d1307ae5679dd18d6 Reviewed-on: https://go-review.googlesource.com/c/go/+/195697 Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
39e8cb0faa
commit
73317080e1
7 changed files with 880 additions and 21 deletions
|
|
@ -308,7 +308,7 @@ const (
|
|||
//
|
||||
// On other platforms, the user address space is contiguous
|
||||
// and starts at 0, so no offset is necessary.
|
||||
arenaBaseOffset uintptr = sys.GoarchAmd64 * (1 << 47)
|
||||
arenaBaseOffset = sys.GoarchAmd64 * (1 << 47)
|
||||
|
||||
// Max number of threads to run garbage collection.
|
||||
// 2, 3, and 4 are all plausible maximums depending
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue