我有一个内存不断增长的程序。我不确定这是内存泄漏还是只是一个不断增长的缓冲区。
我成功隔离了问题,但还是找不到问题。
有一些奇怪的行为:如果我移除压缩部分,泄漏就会消失。所以我假设它在那里。但是,如果我(仅)删除开关中带有 chanTest 的子句,泄漏也会消失。有人可以确认这个问题并解释我为什么它有这样的行为吗?我正在使用 go1.0.3
谢谢!
这是程序:(它每 100 毫秒压缩一些虚拟数据)
package main
import (
"bytes"
"compress/zlib"
"fmt"
"time"
)
func main() {
timeOut := time.NewTicker(100 * time.Millisecond)
chanTest := make(chan int32)
for {
L: for { // timer part
select {
case resp := <- chanTest: // strange clause
fmt.Println("received stuff", resp)
case <-timeOut.C:
fmt.Println("break")
break L
}
}
timeOut = time.NewTicker(100 * time.Millisecond)
// compression part
data := []byte{1, 2, 3, 4, 5, 6, 7}
var b bytes.Buffer
w := zlib.NewWriter(&b)
w.Write(data)
w.Close()
b.Reset()
}
}