相关疑难解决方法(0)

去内存消费管理

我是Go的新手,试图找出它如何管理内存消耗.

我的一个测试项目中的内存有问题.我不明白为什么当我的程序运行很长时间时,Go会使用越来越多的内存(从不释放它).

我正在运行下面提供的测试用例.在第一次分配后,程序使用近350 MB的内存(根据ActivityMonitor).然后我尝试释放它,ActivityMonitor显示内存消耗增加一倍.为什么?

我使用Go 1.0.3在OS X上运行此代码.

这段代码有什么问题?在Go程序中管理大变量的正确方法是什么?

在实现使用大量时间和内存的算法时,我遇到了另一个与内存管理相关的问题; 运行一段时间后,它会抛出"内存不足"异常.

package main

import ("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 …
Run Code Online (Sandbox Code Playgroud)

memory-management go memory-consumption

25
推荐指数
2
解决办法
2万
查看次数

清除golang中的切片是否可以保证垃圾收集?

我想实现基于时间的插槽,以便使用golang切片保存数据。我设法提出了一个go程序,它也可以工作。但是我对垃圾回收和该程序的一般性能没有疑问。切片等于nil时,此程序是否保证对项目进行垃圾回收?而且,在重新整理切片时,希望该程序不要进行任何深层复制。

type DataSlots struct {
    slotDuration  int //in milliseconds
    slots         [][]interface{}
    totalDuration int //in milliseconds
}

func New(slotDur int, totalDur int) *DataSlots {
    dat := &DataSlots{slotDuration: slotDur,
        totalDuration: totalDur}
    n := totalDur / slotDur
    dat.slots = make([][]interface{}, n)
    for i := 0; i < n; i++ {
        dat.slots[i] = make([]interface{}, 0)
    }
    go dat.manageSlots()
    return dat
}

func (self *DataSlots) addData(data interface{}) {
    self.slots[0] = append(self.slots[0], data)
}

// This should be a go routine
func (self *DataSlots) manageSlots() { …
Run Code Online (Sandbox Code Playgroud)

garbage-collection go slice

4
推荐指数
1
解决办法
1450
查看次数