标签: objectspace

ObjectSpace - 它是什么以及人们如何使用它?

Ruby-doc有这样的描述:

ObjectSpace模块包含许多与垃圾收集工具交互的例程,允许您使用迭代器遍历所有活动对象.

ObjectSpace还为对象终结器提供支持,当特定对象即将被垃圾回收销毁时将调用这些过程.

任何人都可以用更简单的语言解释这个,如果没有,至少提供有关使用它的地方的信息?

ruby garbage-collection memory-management objectspace

11
推荐指数
2
解决办法
4868
查看次数

ruby 2.0 undefined方法ObjectSpace.trace_object_allocations

在ruby 2.0.0/247或头上试过这个:

require 'objspace'
ObjectSpace.trace_object_allocations -> undefined method `trace_object_allocations' 
for ObjectSpace:Module
Run Code Online (Sandbox Code Playgroud)

文档说它应该工作http://www.ruby-doc.org/stdlib-2.0/libdoc/objspace/rdoc/ObjectSpace.html知道我缺少什么?

ruby objectspace ruby-2.0

6
推荐指数
1
解决办法
756
查看次数

ObjectSpace.count_objects中每个哈希值的含义是什么?

在ruby 1.9.3中,我使用ObjectSpace来检查内存问题.ObjectSpace.count_objects返回一个哈希,如下所示:

{:TOTAL=>1004232, :FREE=>258543, :T_OBJECT=>12519, :T_CLASS=>10318, :T_MODULE=>1330,    
:T_FLOAT=>2024, :T_STRING=>555422, :T_REGEXP=>3543, :T_ARRAY=>68372, :T_HASH=>5399,
:T_STRUCT=>542, :T_BIGNUM=>8105, :T_FILE=>10, :T_DATA=>44277, :T_MATCH=>6, :T_COMPLEX=>1,   
:T_RATIONAL=>82, :T_NODE=>31973, :T_ICLASS=>1766}
Run Code Online (Sandbox Code Playgroud)

每个哈希值是什么意思?特别是,为什么:TOTAL长时间保持不变?这是否意味着没有创建新对象?

我看到了类似的帖子,但还没有好的答案.

ruby ruby-on-rails objectspace

5
推荐指数
1
解决办法
606
查看次数

为什么`ObjectSpace.each_object(String)`包含任何字符串?

在Mike HR和Stefan对我的一个问题发表评论之后,我注意到ObjectSpace.each_object(String)包括我能想到的任何字符串:

strings = ObjectSpace.each_object(String)
strings.include?("some random string") # => true
Run Code Online (Sandbox Code Playgroud)

要么

strings = ObjectSpace.each_object(String).to_a
strings.include?("some random string") # => true
Run Code Online (Sandbox Code Playgroud)

我认为strings应该只包括那时存在的字符串.为什么它包含任何字符串?

然而,当我计算长度时strings,它返回一个有限数:

ObjectSpace.each_object(String).to_a.length # => 15780
Run Code Online (Sandbox Code Playgroud)

这可以在Ruby 2.1.2p95(2014-05-08修订版45877)[x86_64-linux]解释器和irb上观察到.

这与Ruby 2.1中引入的冻结字符串文字优化有什么关系吗?

ruby objectspace

2
推荐指数
1
解决办法
162
查看次数