ruby - 什么时候在 Ruby 中收集常量垃圾?

标签 ruby garbage-collection

  1. 分配给常量的 Class 对象何时会被垃圾回收?例如

    class Foo; end
    Bar = Class.new {}
    
  2. 在匿名类/模块中声明的常量何时会被垃圾回收?例如

    foo = Class.new do
      self::NAME = "Bar"
    end
    foo::NAME  # Bar
    foo = nil 
    GC.start 
    

    在上面的例子中,匿名类内部声明的常量NAME会被垃圾回收吗? (我假设匿名类将被垃圾收集..)

最佳答案

很容易将其归结为非常普遍的情况:如果一个对象不再有任何对它的引用,它就可以被垃圾收集。请注意,我说的是对象,而不是变量。变量不会被垃圾回收,对象会。


现在让我们看看你给出的例子:

class Foo; end
Bar = Class.new {}

Class 的实例只有在分配给它们的常量(如果有的话)被重新分配给不同的值(例如 Bar = nil)时才会被垃圾回收,并且没有那个类的实例,也没有从它继承的类。

foo = Class.new do
  self::NAME = "Bar"
end
foo::NAME  # Bar
foo = nil

以前在 foofoo::NAME 中的值可以被垃圾回收,如果没有其他引用的话(即这个片段是完整的代码)。

关于ruby - 什么时候在 Ruby 中收集常量垃圾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20167694/

相关文章:

ruby - 对多个变量检查​​ nil

java - 从线程中更改 boolean 变量时,java中的long gc收集

java - JAVA 中字符串的不可变性

ruby-on-rails - 在 ruby​​ 中从 Excel xls 转换为 xlsx

ruby-on-rails - Rails 最小化数据库负载

ruby-on-rails - Rails has_many :through with :primary_key

JRuby 中的 Java 命令

garbage-collection - JVM 分钟长 GC

java - 符合垃圾回收条件的对象数量

Java JNI 引用类型,传递 ByteBuffer