GOARCH=386 Garbage Collection Is Ineffectual: mmap: errno=0xc
package main
import (
"fmt"
"runtime"
)
func fs() []float64 {
r := make([]float64, 923521)
return r
}
func main() {
s := fs()
for i := 0; i < 1000; i++ {
s = fs()
m := runtime.MemStats
fmt.Printf("i %d; Alloc %d; TotalAlloc %d\n", i, m.Alloc, m.TotalAlloc)
}
m := runtime.MemStats
fmt.Printf("end; Alloc %d; TotalAlloc %d\n", m.Alloc, m.TotalAlloc)
_ = s
}
Expected results obtained with 6g, GOARCH=amd64, and GOOS=linux, for hg id 5af6f6656531
tip, using 6.0GB real memory:
i 0; Alloc 15086544; TotalAlloc 15141352
i 1; Alloc 15156656; TotalAlloc 23020488
i 2; Alloc 22545888; TotalAlloc 30798840
i 3; Alloc 30004752; TotalAlloc 38646824
i 4; Alloc 15295920; TotalAlloc 46520408
i 5; Alloc 22685152; TotalAlloc 54298760
i 6; Alloc 30074384; TotalAlloc 62077112
. .
i 996; Alloc 30074384; TotalAlloc 7771093592
i 997; Alloc 15295920; TotalAlloc 7778897544
i 998; Alloc 22685152; TotalAlloc 7786675896
i 999; Alloc 30074384; TotalAlloc 7794454248
end; Alloc 30074432; TotalAlloc 7794838296
Actual results obtained with 8g, GOARCH=386, and GOOS=linux, for hg id 5af6f6656531 tip,
using 0.5GB real memory:
i 0; Alloc 14975824; TotalAlloc 16730200
i 1; Alloc 22402248; TotalAlloc 24448472
i 2; Alloc 29828344; TotalAlloc 32166408
i 3; Alloc 37254440; TotalAlloc 39884344
i 4; Alloc 44680536; TotalAlloc 47602280
i 5; Alloc 44717256; TotalAlloc 55320216
i 6; Alloc 52106488; TotalAlloc 63001288
. . .
i 427; Alloc 2814607576; TotalAlloc 3310449848
i 428; Alloc 2822033672; TotalAlloc 3318167784
i 429; Alloc 2829459768; TotalAlloc 3325885720
i 430; Alloc 2836885864; TotalAlloc 3333603656
mmap: errno=0xc
For a complete description of the problem q.v. conjugate gradient method out of memory
http://groups.google.com/group/golang-nuts/browse_thread/thread/6fb3e3b7ae04d42a
GOARCH=386 Garbage Collection Is Ineffectual: mmap: errno=0xc package main import ( "fmt" "runtime" ) func fs() []float64 { r := make([]float64, 923521) return r } func main() { s := fs() for i := 0; i < 1000; i++ { s = fs() m := runtime.MemStats fmt.Printf("i %d; Alloc %d; TotalAlloc %d\n", i, m.Alloc, m.TotalAlloc) } m := runtime.MemStats fmt.Printf("end; Alloc %d; TotalAlloc %d\n", m.Alloc, m.TotalAlloc) _ = s } Expected results obtained with 6g, GOARCH=amd64, and GOOS=linux, for hg id 5af6f6656531 tip, using 6.0GB real memory: i 0; Alloc 15086544; TotalAlloc 15141352 i 1; Alloc 15156656; TotalAlloc 23020488 i 2; Alloc 22545888; TotalAlloc 30798840 i 3; Alloc 30004752; TotalAlloc 38646824 i 4; Alloc 15295920; TotalAlloc 46520408 i 5; Alloc 22685152; TotalAlloc 54298760 i 6; Alloc 30074384; TotalAlloc 62077112 . . i 996; Alloc 30074384; TotalAlloc 7771093592 i 997; Alloc 15295920; TotalAlloc 7778897544 i 998; Alloc 22685152; TotalAlloc 7786675896 i 999; Alloc 30074384; TotalAlloc 7794454248 end; Alloc 30074432; TotalAlloc 7794838296 Actual results obtained with 8g, GOARCH=386, and GOOS=linux, for hg id 5af6f6656531 tip, using 0.5GB real memory: i 0; Alloc 14975824; TotalAlloc 16730200 i 1; Alloc 22402248; TotalAlloc 24448472 i 2; Alloc 29828344; TotalAlloc 32166408 i 3; Alloc 37254440; TotalAlloc 39884344 i 4; Alloc 44680536; TotalAlloc 47602280 i 5; Alloc 44717256; TotalAlloc 55320216 i 6; Alloc 52106488; TotalAlloc 63001288 . . . i 427; Alloc 2814607576; TotalAlloc 3310449848 i 428; Alloc 2822033672; TotalAlloc 3318167784 i 429; Alloc 2829459768; TotalAlloc 3325885720 i 430; Alloc 2836885864; TotalAlloc 3333603656 mmap: errno=0xc For a complete description of the problem q.v. conjugate gradient method out of memory http://groups.google.com/group/golang-nuts/browse_thread/thread/6fb3e3b7ae04d42a