【问题标题】:Garbage Collection of Symbols Ruby 2.2.1垃圾符号集合 Ruby 2.2.1
【发布时间】:2016-03-16 00:47:12
【问题描述】:

所以从 Ruby 2.2+ 版本开始引入符号的垃圾收集。我在 irb 中写了如下代码 sn-p :

before =  Symbol.all_symbols.size #=>3331
100_000.times do |i|
  "sym#{i}".to_sym
end

Symbol.all_symbols.size #=> 18835
GC.start
Symbol.all_symbols.size #=>3331

正如预期的那样,它收集了使用to_sym动态生成的所有符号。

那么 GC 是如何知道要收集哪些符号的呢?即使它们在程序中被引用,它会收集符号吗?符号垃圾回收是如何工作的?如果程序中引用了我创建的符号之一,它还会收集它吗?

我使用的是 Ruby 2.2.1。

【问题讨论】:

    标签: ruby garbage-collection ruby-2.2


    【解决方案1】:

    基本上,所有符号在 Ruby 运行时动态创建(通过 to_sym 等)可以被垃圾收集,因为它们没有在内部幕后使用Ruby 解释器。但是,由于创建新方法而创建的符号或静态在代码内不会被垃圾收集。例如:foodef foo; end 都不会被垃圾回收,但"foo".to_sym 将有资格进行垃圾回收。

    请参阅 Richard Schneeman's post 作为参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2017-02-21
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      相关资源
      最近更新 更多