【问题标题】:ObjectSpace - what is it and how do people use it?ObjectSpace - 它是什么以及人们如何使用它?
【发布时间】:2011-07-04 04:15:53
【问题描述】:

Ruby-doc 有这样的描述:

ObjectSpace 模块包含一个 与之交互的例程数 垃圾收集设施和 让你穿越所有的生活 带有迭代器的对象。

ObjectSpace 还提供支持 对象终结器,将是 当特定对象大约时调用 被垃圾回收销毁。

谁能用更简单的语言解释一下,如果没有,至少提供关于它在哪里使用的信息?

【问题讨论】:

    标签: ruby memory-management garbage-collection objectspace


    【解决方案1】:

    例如,计算某个类的实例数:

    class Examp
      def self.obj_count
        count = 0
        ObjectSpace.each_object(self) do |b|
          count += 1
        end
    
        return count
      end
    end
    
    a = Examp.new
    b = Examp.new
    c = Examp.new
    
    puts Examp.obj_count #=> 3
    

    我知道类变量,这只是使用示例。每当您想对类的每个实例执行某些操作时,它都会很有用。

    【讨论】:

    • 您好,感谢您的回答。你也碰巧知道这个在现实世界中的用法吗? /好奇
    【解决方案2】:

    garbage collector 是一种具有托管内存的语言结构。它是管理内存的东西。本质上,垃圾收集器的工作是找出一块已分配的内存何时不再需要,然后释放它。

    当您使用带有垃圾收集器的语言时,您可能需要做一些事情:

    1. 只要一块内存被释放就运行一个方法
    2. 统计当前占用内存的类的所有实例
    3. 统计所有类的所有实例

    ObjectSpace 使您可以访问做这种性质的事情。从本质上讲,它是一种访问当前正在使用分配内存的任何事物的方法。

    【讨论】:

      【解决方案3】:

      ObjectSpace 的实际用法是 derive the full class hierarchy of Exceptions

      【讨论】:

        猜你喜欢
        • 2016-12-18
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 2014-05-27
        • 2022-08-13
        相关资源
        最近更新 更多