История изменений
Исправление kaldeon, (текущая версия) :
Выключил гц, запустил 100,000,000 итераций, выводя текущее и общее числа аллокаций на каждой 10,000,000 итерации, включил гц и снова сделал замеры — всё освободилось.
; go vet && go run lor.go
alloc (kib) totalalloc (kib)
110 110
234486 234486
468861 468861
703236 703236
937611 937611
1171986 1171986
1406362 1406362
1640737 1640737
1875112 1875112
2109488 2109488
2343863 2343863
124 2343877
Код:
func main() {
w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
defer w.Flush()
memstats := func() {
var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Fprintf(w, "%v\t%v\t\n", m.Alloc/1024, m.TotalAlloc/1024)
}
debug.SetGCPercent(-1)
fmt.Fprintln(w, "alloc (kib)\ttotalalloc (kib)\t")
state := Printsum
for i := 0; i < 100_000_000; i++ {
if (i % 10_000_000) == 0 {
memstats()
}
state = state(i)
}
memstats()
runtime.GC()
memstats()
}
Исправление kaldeon, :
Выключил гц, запустил 100,000,000 итераций, выводя текущее и общее числа аллокаций на каждой 10,000,000 итерации, включил гц и снова сделал замеры — всё освободилось.
% go vet && go run lor.go
alloc (kib) totalalloc (kib)
110 110
234486 234486
468861 468861
703236 703236
937611 937611
1171986 1171986
1406362 1406362
1640737 1640737
1875112 1875112
2109488 2109488
2343863 2343863
124 2343877
Код:
func main() {
w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
defer w.Flush()
memstats := func() {
var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Fprintf(w, "%v\t%v\t\n", m.Alloc/1024, m.TotalAlloc/1024)
}
debug.SetGCPercent(-1)
fmt.Fprintln(w, "alloc (kib)\ttotalalloc (kib)\t")
state := Printsum
for i := 0; i < 100_000_000; i++ {
if (i % 10_000_000) == 0 {
memstats()
}
state = state(i)
}
memstats()
runtime.GC()
memstats()
}
Исправление kaldeon, :
Выключил гц, запустил 100,000,000 итераций, выводя текущее и общее числа аллокаций на каждой 10,000,000 итерации, включил гц и снова сделал замеры — гц освободил всё.
% go vet && go run lor.go
alloc (kib) totalalloc (kib)
110 110
234486 234486
468861 468861
703236 703236
937611 937611
1171986 1171986
1406362 1406362
1640737 1640737
1875112 1875112
2109488 2109488
2343863 2343863
124 2343877
Код:
func main() {
w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
defer w.Flush()
memstats := func() {
var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Fprintf(w, "%v\t%v\t\n", m.Alloc/1024, m.TotalAlloc/1024)
}
debug.SetGCPercent(-1)
fmt.Fprintln(w, "alloc (kib)\ttotalalloc (kib)\t")
state := Printsum
for i := 0; i < 100_000_000; i++ {
if (i % 10_000_000) == 0 {
memstats()
}
state = state(i)
}
memstats()
runtime.GC()
memstats()
}
Исходная версия kaldeon, :
Выключил гц, запустил 100,000,000 итераций, выводя текущее и общее числа аллокаций на каждой 10,000,000 итерации, выключил гц и снова сделал замеры — гц освободил всё.
% go vet && go run lor.go
alloc (kib) totalalloc (kib)
110 110
234486 234486
468861 468861
703236 703236
937611 937611
1171986 1171986
1406362 1406362
1640737 1640737
1875112 1875112
2109488 2109488
2343863 2343863
124 2343877
Код:
func main() {
w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
defer w.Flush()
memstats := func() {
var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Fprintf(w, "%v\t%v\t\n", m.Alloc/1024, m.TotalAlloc/1024)
}
debug.SetGCPercent(-1)
fmt.Fprintln(w, "alloc (kib)\ttotalalloc (kib)\t")
state := Printsum
for i := 0; i < 100_000_000; i++ {
if (i % 10_000_000) == 0 {
memstats()
}
state = state(i)
}
memstats()
runtime.GC()
memstats()
}