Ruby Rails中算法之后的内存泄漏?

Ruby Rails中算法之后的内存泄漏?,ruby,algorithm,memory-leaks,garbage-collection,Ruby,Algorithm,Memory Leaks,Garbage Collection,受合并排序的合并部分启发,我编写了一个算法 def self.merge(arr) if arr.length == 1 return arr end groups = [] (0...-(-arr.length/2)).each do |i| groups << [] if !arr[2*i+1].nil? arr[2*i].each do |cal1| arr[2*i+1]

受合并排序的合并部分启发,我编写了一个算法

  def self.merge(arr)
    if arr.length == 1
      return arr
    end
    groups = []
    (0...-(-arr.length/2)).each do |i|
      groups << []
      if !arr[2*i+1].nil?
        arr[2*i].each do |cal1|
          arr[2*i+1].each do |cal2|
            mergecal = func(cal1,cal2)
            if mergecal
              groups[i] << mergecal
            else
              mergecal = nil
            end
          end
        end
      else
        groups[i] = arr[2*i]
      end
    end
    arr = nil
    return merge(groups)
  end
def自合并(arr)
如果arr.length==1
返回arr
结束
组=[]
(0…-(-arr.length/2))。每个do|i|

组Ruby垃圾收集不会立即减少Ruby程序分配的内存量。内存分配非常昂贵,因此即使您创建的对象立即被GC收集,内存也会缓慢地释放回操作系统。如果您认为此函数存在内存泄漏,那么应该尝试在非rails进程中运行它,在该进程中您可以更好地控制对象的生命周期。在运行GC之前和之后,可以使用获取有关活动对象和自由对象数量的信息。我喜欢ruby GC的工作原理,这也值得一读。

你有任何输入示例吗?看看这个gem:双重否定有什么意义
-(-arr.length/2)
@EricDuminil它提供一个数组
[[obj1]、[obj2]、[obj3]]
,其中对象是自定义的objects@sawa这只是一种懒散的方式,没有功能就拿着天花板。哦,那真是一个糟糕的事情。我想你是对的。我必须一遍又一遍地调用
GC.start
,因为算法分配了太多的内存,GC无法一次性释放它。