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