// $G $D/$F.go && $L $F.$A && ./$A.out | |
// Copyright 2011 The Go Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
// Test that goroutines and garbage collection run during init. | |
package main | |
import "runtime" | |
var x []byte | |
func init() { | |
c := make(chan int) | |
go send(c) | |
<-c | |
const chunk = 1<<20 | |
runtime.UpdateMemStats() | |
sys := runtime.MemStats.Sys | |
b := make([]byte, chunk) | |
for i := range b { | |
b[i] = byte(i%10 + '0') | |
} | |
s := string(b) | |
for i := 0; i < 1000; i++ { | |
x = []byte(s) | |
} | |
runtime.UpdateMemStats() | |
sys1 := runtime.MemStats.Sys | |
if sys1-sys > chunk*50 { | |
println("allocated 1000 chunks of", chunk, "and used ", sys1-sys, "memory") | |
} | |
} | |
func send(c chan int) { | |
c <- 1 | |
} | |
func main() { | |
} | |