猿问

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

请考虑以下代码:


go func() {

    for now := range time.Tick(time.Minute) {

        fmt.Println(now, statusUpdate())

    }

}()

我需要for循环永远运行,永远不需要停止它。这会导致内存泄漏吗?


我知道如果我需要中断for循环,它会导致内存泄漏。但是,如果我不需要中断 for 循环呢?


医生说


虽然Tick对于不需要关闭股票代码的客户端很有用,但请注意,如果没有办法关闭它,垃圾回收器无法恢复底层的股票代码;它“泄漏”。


我只是想把它做好。


莫回无
浏览 78回答 1
1回答

UYOU

首先,让我们从维基百科中看一下“内存泄漏”的定义:在计算机科学中,内存泄漏是一种资源泄漏,当计算机程序错误地管理内存分配时,就会发生这种泄漏,而不再需要的内存不会被释放。重要的是要注意,在您引用的文档中,它没有特别提到“内存泄漏”,只是“泄漏”(意思是“资源泄漏”)。有问题的资源不仅是股票代码使用的内存,而且是运行它的戈鲁廷。因此,我将此定义更广泛地解释为适用于“资源泄漏”。正如您引用的文档所提到的,无法释放股票代码的资源。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        }    }}()
随时随地看视频慕课网APP

相关分类

Go
我要回答