我是Go的新手,它試圖弄清楚它如何管理內(nèi)存消耗。我的一個(gè)測(cè)試項(xiàng)目中的內(nèi)存出現(xiàn)問(wèn)題。我不明白為什么當(dāng)我的程序長(zhǎng)時(shí)間運(yùn)行時(shí),Go使用越來(lái)越多的內(nèi)存(從不釋放它)。我正在運(yùn)行下面提供的測(cè)試用例。第一次分配后,程序?qū)⑹褂媒?50 MB的內(nèi)存(根據(jù)ActivityMonitor)。然后,我嘗試釋放它,ActivityMonitor顯示內(nèi)存消耗增加了一倍。為什么?我正在使用Go 1.0.3在OS X上運(yùn)行此代碼。此代碼有什么問(wèn)題?在Go程序中管理大變量的正確方法是什么?在實(shí)現(xiàn)使用大量時(shí)間和內(nèi)存的算法時(shí),我還遇到了另一個(gè)與內(nèi)存管理相關(guān)的問(wèn)題。運(yùn)行一段時(shí)間后,將引發(fā)“內(nèi)存不足”異常。package mainimport ("fmt" "time")func main() { fmt.Println("getting memory") tmp := make([]uint32, 100000000) for kk, _ := range tmp { tmp[kk] = 0 } time.Sleep(5 * time.Second) fmt.Println("returning memory") tmp = make([]uint32, 1) tmp = nil time.Sleep(5 * time.Second) fmt.Println("getting memory") tmp = make([]uint32, 100000000) for kk, _ := range tmp { tmp[kk] = 0 } time.Sleep(5 * time.Second) fmt.Println("returning memory") tmp = make([]uint32, 1) tmp = nil time.Sleep(5 * time.Second) return}
進(jìn)行內(nèi)存消耗管理
慕無(wú)忌1623718
2021-05-10 12:08:26