Ruby垃圾回收堆槽大小

5
因此,Ruby企业版文档指出GC设置中的所有值都是以插槽为定义的:http://www.rubyenterpriseedition.com/documentation.html#_garbage_collector_performance_tuning(例如,RUBY_HEAP_MIN_SLOTS)。我们通过试错来优化应用程序的最小插槽大小和增量以获得最佳性能(我们有足够的机器来了解不同值如何影响malloc调用和Full GC的数量)。但是有件事一直在困扰我:1个插槽有多大(以字节为单位)?
4个回答

4

来自Ruby源代码:

 *  sizeof(RVALUE) is
 *  20 if 32-bit, double is 4-byte aligned
 *  24 if 32-bit, double is 8-byte aligned
 *  40 if 64-bit

3
$ rvm use ruby-1.9.2-p136
$ gdb ruby
(gdb) p sizeof(RVALUE)
$1 = 40

1
什么是gdb?在这个上下文中,$1 =是什么意思?“40”表示什么单位? - John Bachir
p = 打印; $1 是返回值; 40 是字节大小: http://zh.wikipedia.org/wiki/Sizeof - arrtchiu

1

1.9 版本的默认值为 8K

http://svn.ruby-lang.org/repos/ruby/trunk/gc.c(搜索 HEAP_SIZE)

请注意,每当它耗尽空间并需要重新分配时,在 1.9 中它会指数级地分配更多堆。

在 1.8 中,它会分配越来越大的堆。


问题是关于1个槽的大小(即默认最小堆大小为10,000个槽,1个槽有多大)。 - glebm

1
在深入代码后: < p > 1个插槽 sizeof(struct RVALUE)的大小,这取决于机器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接