为了账号安全,请及时绑定邮箱和手机立即绑定

会花时间。勾选导致内存泄漏,而我永远不需要停止它?

会花时间。勾选导致内存泄漏,而我永远不需要停止它?

Go
莫回无 2022-09-12 17:05:02
请考虑以下代码:go func() {    for now := range time.Tick(time.Minute) {        fmt.Println(now, statusUpdate())    }}()我需要for循环永远运行,永远不需要停止它。这会导致内存泄漏吗?我知道如果我需要中断for循环,它会导致内存泄漏。但是,如果我不需要中断 for 循环呢?医生说虽然Tick对于不需要关闭股票代码的客户端很有用,但请注意,如果没有办法关闭它,垃圾回收器无法恢复底层的股票代码;它“泄漏”。我只是想把它做好。
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

首先,让我们从维基百科中看一下“内存泄漏”的定义:

在计算机科学中,内存泄漏是一种资源泄漏,当计算机程序错误地管理内存分配时,就会发生这种泄漏,而不再需要的内存不会被释放。

重要的是要注意,在您引用的文档中,它没有特别提到“内存泄漏”,只是“泄漏”(意思是“资源泄漏”)。有问题的资源不仅是股票代码使用的内存,而且是运行它的戈鲁廷。因此,我将此定义更广泛地解释为适用于“资源泄漏”。

正如您引用的文档所提到的,无法释放股票代码的资源。time.Tick

因此,根据此定义,如果在程序的任何后续点不再需要该股票代码,则发生了资源泄漏。如果在创建后程序的其余部分始终需要该股票代码,则它不是泄漏。

然而,在维基百科的定义中,还有这个注释:

当对象存储在内存中但运行中的代码无法访问时,也可能发生内存泄漏。

同样,无法释放股票代码的资源。time.Tick

因此,根据这个持续的定义,你可能会说使用总是资源泄漏。time.Tick

实际上,只要您越过了没有ing,您就有合理的保证,即该代码将继续用于程序的其余部分,并且不会有“泄漏”。如果您怀疑股票代码是否会被永久使用,请使用时间。新投票器和它适当地:rangetime.TickbreakStop()

go func() {

    ticker := time.NewTicker(time.Minute)

    defer ticker.Stop()


    for now := range ticker.C {

        fmt.Println(now, statusUpdate())

        // some exception

        if (something) {

            break

        }

    }

}()


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信