返回信息流先贴代码
num := 100
for i := 1; i < num; i++ {
if _, err := http.Get("http://www.baidu.com"); err != nil {
fmt.Println(err)
}
if _, err := doSomething(); err != nil {
fmt.Println(err)
}
}
想问问上面的代码内存泄漏状况, 据我所知第一个http.get肯定会内存泄漏,gc不会去释放文件描述符; 如果第二个doSomething()没有io,我也没有去接收返回值,是否会有对应的内存分配呢~?如果有,GC过程是怎么样的~?
这是一条镜像帖。来源:北邮人论坛 / golang / #857同步于 2017/9/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖
【问题】go语言多返回值和垃圾回收
menmencqupt
2017/9/14镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
gc只能释放内存,其他的资源要手动释放。什么语言都一样,c++有raii,java有try-finally也有try(xxx) {...},python有with...as...语句,ruby有回调块。go有defer。
谢谢暖神, 刚刚测试了下,第二种情况不会泄露,第一种情况会泄露。
【 在 nuanyangyang 的大作中提到: 】
: gc只能释放内存,其他的资源要手动释放。什么语言都一样,c++有raii,java有try-finally也有try(xxx) {...},python有with...as...语句,ruby有回调块。go有defer。
第一种不算内存泄漏吧。。。
Get之后不close 那个body的话,里面那个连接会一直等着超时,不会滚回连接池,如果你没有超时估计就越来越多的连接。
【 在 menmencqupt 的大作中提到: 】
: 先贴代码
: [size=3][code=c]
: num := 100
: ...................
为什么不算。?
【 在 aiquestion 的大作中提到: 】
: 第一种不算内存泄漏吧。。。
: Get之后不close 那个body的话,里面那个连接会一直等着超时,不会滚回连接池,如果你没有超时估计就越来越多的连接。
:
感觉从广义上来说,只要申请了内存,程序的后续不去使用且不释放,那么就算内存泄漏了。
【 在 aiquestion 的大作中提到: 】
: 唔,唔。我错了。。。确实算,但是主要问题是链接没释放。