Ruby垃圾收集堆插槽大小
因此,ruby enterprise文档声明GC设置中的所有值都是在插槽中定义的: (例如RUBY\u堆\u最小\u插槽) 我们通过反复试验微调了应用程序的最小插槽大小和增量,以获得最佳性能(我们有足够多的机器来了解不同的值如何影响malloc调用和完整gc的数量)Ruby垃圾收集堆插槽大小,ruby,garbage-collection,Ruby,Garbage Collection,因此,ruby enterprise文档声明GC设置中的所有值都是在插槽中定义的: (例如RUBY\u堆\u最小\u插槽) 我们通过反复试验微调了应用程序的最小插槽大小和增量,以获得最佳性能(我们有足够多的机器来了解不同的值如何影响malloc调用和完整gc的数量) 但有件事困扰了我一段时间:1个插槽的字节有多大?1.9中的默认值是8K (搜索堆大小) 请注意,每当它耗尽空间并需要重新分配时,在1.9中,它会以指数方式分配更多的堆 在1.8中,它将分配越来越大的堆。在通过代码挖掘之后: 1插槽
但有件事困扰了我一段时间:1个插槽的字节有多大?1.9中的默认值是8K (搜索堆大小) 请注意,每当它耗尽空间并需要重新分配时,在1.9中,它会以指数方式分配更多的堆
在1.8中,它将分配越来越大的堆。在通过代码挖掘之后:
1插槽的大小为sizeof(struct RVALUE)
,这取决于机器。来自Ruby源代码:
$ rvm use ruby-1.9.2-p136
$ gdb ruby
(gdb) p sizeof(RVALUE)
$1 = 40
* 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
问题是关于1个插槽的大小(即默认的最小堆大小是10000个插槽,1个插槽有多大)gdb是什么?在这个上下文中,$1=
是什么意思?“40”是什么单位?p
=print
$1
是返回值40是以字节为单位的大小: