github.com/razvanm/vanadium-go-1.3@v0.0.0-20160721203343-4a65068e5915/test/gc2.go (about) 1 // run 2 3 // +build !nacl 4 5 // Copyright 2011 The Go Authors. All rights reserved. 6 // Use of this source code is governed by a BSD-style 7 // license that can be found in the LICENSE file. 8 9 // Test that buffered channels are garbage collected properly. 10 // An interesting case because they have finalizers and used to 11 // have self loops that kept them from being collected. 12 // (Cyclic data with finalizers is never finalized, nor collected.) 13 14 package main 15 16 import ( 17 "fmt" 18 "os" 19 "runtime" 20 ) 21 22 func main() { 23 const N = 10000 24 st := new(runtime.MemStats) 25 memstats := new(runtime.MemStats) 26 runtime.ReadMemStats(st) 27 for i := 0; i < N; i++ { 28 c := make(chan int, 10) 29 _ = c 30 if i%100 == 0 { 31 for j := 0; j < 4; j++ { 32 runtime.GC() 33 runtime.Gosched() 34 runtime.GC() 35 runtime.Gosched() 36 } 37 } 38 } 39 40 runtime.ReadMemStats(memstats) 41 obj := int64(memstats.HeapObjects - st.HeapObjects) 42 if obj > N/5 { 43 fmt.Println("too many objects left:", obj) 44 os.Exit(1) 45 } 46 }