【问题标题】:Is there any advantage to removing a variable?删除变量有什么好处吗?
【发布时间】:2013-09-16 08:23:09
【问题描述】:

我正在使用 Ruby 进行编程(尽管它可能不是很相关),并处理一些相当大的数据集。因此,我的一些变量可能非常大。

一旦我不再需要一个变量,删除它有什么好处吗?这可能会释放一些 RAM 还是有任何其他优势?

【问题讨论】:

  • 如果对象不再被变量或其他对象引用,它们将被垃圾回收,但 Ruby 进程在分配内存后不会将内存释放回操作系统(这在 JRuby 中可能不同)。

标签: ruby optimization ram


【解决方案1】:

是的。它将释放一些 RAM 以在程序中使用,并加快其他操作。这就是垃圾收集的用途。

【讨论】:

  • 你是说我需要显式删除一个变量以允许它被垃圾收集吗? (即与 Zach Kemp 的评论相反?)
  • 变量不是对象,它指的是对象。如果删除对某个对象的所有引用,则该对象将被垃圾回收,除非它不是特定类(fixnum、symbol 等)。这与 Zach Kemp 所说的一致。
  • 啊,有道理。我对 Ruby 中的对象与变量感到非常困惑。我刚刚意识到我正在使用一个局部变量,显然是cannot be removed。因此,我应该给它分配像 nil 这样的小东西吗?
  • 一个局部变量只保留在作用域内(如方法定义或块),所以你通常不需要关心它,但如果不是这样,把它赋值给别的东西将是一个好主意。所指对象是否小并不重要,只要它已经存在,因为引用只是一个指针。
【解决方案2】:

如果您想要“手动垃圾收集”,您可以查看Ojbect#remove_instance_variable 方法,该方法会将值更改为您提到的nil,并返回删除的数据,我想这可能会有所帮助用于任何术后处理。

http://ruby-doc.org/core-2.0.0/Object.html#method-i-remove_instance_variable

【讨论】:

  • 谢谢,我知道如何删除变量(虽然我的是一个局部变量),但我不确定什么时候应该这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 2011-10-13
相关资源
最近更新 更多