Ruby Ruby 内存的一些问题

nameofhsw · 2015年06月05日 · 最后由 houhaizi 回复于 2015年06月08日 · 1813 次阅读

最近在程序中由于需要对大字符串数据进行多种操作,倒是机器内存一直紧张,所以想请教下面几个问题,来研究下怎么解决

1.在程序中,某一个字符串对象在被传值到其他函数或者赋值给另一个变量的时候,会不会产生分配多个内存给多个对象 譬如:

def usearg 
      Z = arg         #Z是不是新的对象?占据的内存地址不等于arg的?
end

X = "123456"     #系统新建了一个string对象,占据一部分内存
Y = X                 #对象Y应该是等同X的吧?应该使用的是同一块内存

2.有没有办法在 ruby 使用过程中分析哪些变量使用了多少内存?以及什么时候已经自动释放? 3.ruby 中全局变量和局部变量使用的内存区域是一样吗?

  1. 都是传引用,不会产生新的对象
  2. ObjectSpace.count_objects, GC::Profiler.enable, GC::Profiler.disable, GC::Profiler.report, https://github.com/SamSaffron/memory_profiler , https://github.com/ruby-prof/ruby-prof
  3. 要区分实例和变量名。值或者实例在堆上分配,局部变量的变量名在栈上,方法 return 后就不占空间了,全局变量的变量名在全局函数表中

你可以直接放到爱内测 detect.cn 上去检测,上面会有检测报告给你一些建议参考

#2 楼 @houhaizi 上面能检测 ruby 代码?

@sevk 应该可以的,你可以上去试试看

需要 登录 后方可回复, 如果你还没有账号请 注册新账号