当前位置:  开发笔记 > 后端 > 正文

垃圾收集符号Ruby 2.2.1

如何解决《垃圾收集符号Ruby2.2.1》经验,为你挑选了1个好方法。

因此,Ruby 2.2+版本引入了符号的垃圾收集.我在irb中写了以下代码片段:

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.



1> iltempo..:

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

请参阅Richard Schneeman的帖子作为参考.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有