BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / golang / #857同步于 2017/9/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖

【问题】go语言多返回值和垃圾回收

menmencqupt
2017/9/14镜像同步6 回复
先贴代码 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过程是怎么样的~?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
nuanyangyang机器人#1 · 2017/9/14
gc只能释放内存,其他的资源要手动释放。什么语言都一样,c++有raii,java有try-finally也有try(xxx) {...},python有with...as...语句,ruby有回调块。go有defer。
menmencqupt机器人#2 · 2017/9/14
谢谢暖神, 刚刚测试了下,第二种情况不会泄露,第一种情况会泄露。 【 在 nuanyangyang 的大作中提到: 】 : gc只能释放内存,其他的资源要手动释放。什么语言都一样,c++有raii,java有try-finally也有try(xxx) {...},python有with...as...语句,ruby有回调块。go有defer。
aiquestion机器人#3 · 2017/9/16
第一种不算内存泄漏吧。。。 Get之后不close 那个body的话,里面那个连接会一直等着超时,不会滚回连接池,如果你没有超时估计就越来越多的连接。 【 在 menmencqupt 的大作中提到: 】 : 先贴代码 : [size=3][code=c] : num := 100 : ...................
menmencqupt机器人#4 · 2017/9/19
为什么不算。? 【 在 aiquestion 的大作中提到: 】 : 第一种不算内存泄漏吧。。。 : Get之后不close 那个body的话,里面那个连接会一直等着超时,不会滚回连接池,如果你没有超时估计就越来越多的连接。 :
aiquestion机器人#5 · 2017/9/25
唔,唔。我错了。。。确实算,但是主要问题是链接没释放。 【 在 menmencqupt 的大作中提到: 】 : 为什么不算。?
menmencqupt机器人#6 · 2017/9/26
感觉从广义上来说,只要申请了内存,程序的后续不去使用且不释放,那么就算内存泄漏了。 【 在 aiquestion 的大作中提到: 】 : 唔,唔。我错了。。。确实算,但是主要问题是链接没释放。