gpt4 book ai didi

ruby - ruby MRI 上的 :FREE in ObjectSpace. count_objects 是什么意思

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:57 25 4
gpt4 key购买 nike

我想知道与从 ObjectSpace.count_object 返回的键 :FREE 关联的计数是多少。文档说这个散列是特定于实现的,所以我的问题专门针对 MRI ruby​​ 2.1。

至少有两个问题(herehere),但没有关于:FREE 的答案。

有什么想法吗?

在某些情况下,空闲计数远高于通过 ObjectSpace.each_object 可访问的对象数,因此我似乎没有关于它们的任何信息。他们是否占用内存。在我的程序中,即使在运行垃圾回收之后,:FREE 计数仍然很高。

最佳答案

我们可以直接从实现本身(来自 gc.c)中找到 :FREE 的含义

*  The keys starting with +:T_+ means live objects.
* For example, +:T_ARRAY+ is the number of arrays.
* +:FREE+ means object slots which is not used now.
* +:TOTAL+ means sum of above.

然后我们可以看看它的测试(来自 test_gc.rb ):

assert_equal(count[:TOTAL]-count[:FREE], stat[:heap_live_slots])
assert_equal(count[:FREE], stat[:heap_free_slots])

最后,我们可以仔细检查没有有趣的事情发生:GC.stat[:heap_free_slot] == ObjectSpace.count_objects[:FREE]

irb(main):001:0> GC.stat[:heap_free_slot] == ObjectSpace.count_objects[:FREE]
=> 真

因此,:FREE 表示堆上分配的未使用槽数。

关于ruby - ruby MRI 上的 :FREE in ObjectSpace. count_objects 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26876323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com