Tag: 垃圾收集

Ruby符号不是垃圾收集的!? 那么,使用String不是更好吗?

如果在循环中创建10,000个字符串,则必须进行大量垃圾收集,这会占用大量资源。 如果对符号执行相同的操作,则会创建无法进行垃圾回收的对象。 哪个更糟?

Ruby GC执行超过每个请求约250-320ms

我在rails应用程序上有一个ruby。 我正在调查我的NewRelic门户网站的Apdex下降,我看到平均而言,GC执行花费了250-320ms。 这是一个非常令人不安的数字。 我在下面放了一个屏幕截图。 我的Ruby版本是: ruby 1.9.3p194(2012-04-20修订版35410)[x86_64-linux] 任何调整这个的建议都是理想的。 这个数字应该大大降低。

Ruby 1.9中的垃圾收集器调优

我知道GC.enable/disable ,但有没有更详细的控制Ruby 1.9垃圾收集器的方法? 在分析我的代码时(使用perftools.rb)我注意到GC代表了总样本的30%,我想看看是否可以调整GC来减少这个数字。 是否有任何环境变量或其他方法可以像REE一样设置堆槽数,malloc限制等?

哈希中的ActiveRecord对象不是垃圾收集 – 一个错误或一种缓存function?

我有一个名为Student的简单ActiveRecord模型,表中包含100条记录。 我在rails控制台会话中执行以下操作: ObjectSpace.each_object(ActiveRecord::Base).count # => 0 x = Student.all ObjectSpace.each_object(ActiveRecord::Base).count # => 100 x = nil GC.start ObjectSpace.each_object(ActiveRecord::Base).count # => 0 # Good! 现在我做以下事情: ObjectSpace.each_object(ActiveRecord::Base).count # => 0 x = Student.all.group_by(&:last_name) ObjectSpace.each_object(ActiveRecord::Base).count # => 100 x = nil GC.start ObjectSpace.each_object(ActiveRecord::Base).count # => 100 # Bad! 任何人都可以解释为什么会发生这种情况,是否有一种聪明的方法来解决这个问题而不知道底层哈希结构 我知道我可以这样做: x.keys.each{|k| x[k]=nil} x = nil GC.start 它会正确地从内存中删除所有的Student对象,但我想知道是否有一个通用的解决方案(我的现实问题是广泛传播,并且具有比上面显示的散列更复杂的数据结构)。 我正在使用Ruby […]

Ruby Class对象垃圾回收

在ruby中,所有类都是Class类的对象。 由于类也是对象,Ruby VM是否遵循针对类对象的相同垃圾收集策略? 是什么决定了类对象对垃圾收集是否安全?

删除Ruby中的对象

假设我有以下课程: class Vehicle @@total_vehicles = 0 @@all_instances = Array.new def initialize @@total_vehicles += 1 @@all_instances << self end def total_vehicles #returns total number of Vehicles 'alive' return @@total_vehicles end def all_vehicles #returns an array of all Vehicle objects return @@all_instances end end 现在让@@total_vehicles和@@all_instances保持最新和正确,我想确保在其中一个对象被垃圾收集时分别正确地减少和更新它们。 但这是发生的事情: v = Vehicle.new Vehicle.total_vehicles # => 1 v = nil #no […]

Ruby垃圾收集

你什么时候在Ruby程序中使用这个垃圾收集方法? GC.start

Ruby / Rails垃圾收集

由于http是无状态的,因此对应用程序的每个请求都会创建一个新对象。 Rails如何清理未使用的对象/频率如何?

Ruby的GC.stat的字段是什么意思?

我正在使用GC.stat来分析我们的Rails应用程序中的内存使用情况。 GC.stat返回带有以下键的哈希: :count :heap_used :heap_length :heap_increment :heap_live_num :heap_free_num :heap_final_num 有人知道这些值究竟是什么意思吗? 在Ruby源代码( gc.c )中没有关于它们的文档,只是注释:“哈希的内容是实现定义的,将来可能会更改。” 其中一些字段从上下文中有意义,例如count是Ruby分配的堆数。 但是heap_final_num是heap_final_num ? 什么是heap_increment ? heap_length是最小堆大小吗? 我正在摆弄RUBY_MIN_HEAP_SLOTS , RUBY_FREE_MIN和RUBY_GC_MALLOC_LIMIT ,但更改这些env变量似乎没有任何影响:heap_count或:heap_length 。 我希望:heap_count如果我从根本上增加最小堆插槽, :heap_count会下降。 所以我真的想知道所有GC.stat值代表什么! 我正在使用Ruby 1.9.3。

如何计算ruby中类的现有实例?

以下是这个问题的一个想法:在创建对象时,增加一个类变量。 当对象被收集时,减少它。 如您@@no_foo ,调用终结器,并且@@no_foo减少。 但是当我稍后查询它时,减量就消失了。 似乎价值只会上升,永不下降(如果我创建两个对象,它将显示2)。 我错过了一些明显的东西吗 class Foo @@no_foo = 0 def initialize puts ‘creating object’ @@no_foo += 1 ObjectSpace.define_finalizer(self, proc { self.delete }) end def delete puts ‘deleting object’ @@no_foo # => 1 @@no_foo -= 1 @@no_foo # => 0 end def self.no_foo @@no_foo # => 0, 1 end end Foo.no_foo # => […]