2010-10-04 57 views
5

所以,紅寶石企業文檔指出,在GC設置中的所有值插槽定義:http://www.rubyenterpriseedition.com/documentation.html#_garbage_collector_performance_tuningRuby的垃圾收集堆插槽大小

(如RUBY_HEAP_MIN_SLOTS)

我們微調我們的應用程序的分槽尺寸並通過反覆試驗增加最佳性能(我們有足夠的機器來了解不同值如何影響malloc調用和Full GC的數量)。

但是有些東西一直在困擾着我一段時間:1個字節的字節數有多大?

回答

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

什麼是GDB?在這種情況下,$ 1 =是什麼意思?什麼單位是「40」? – 2013-06-28 21:11:54

+0

'p' ='print'; '$ 1'是返回值; '40'是以字節爲單位的大小:http://en.wikipedia.org/wiki/Sizeof – arrtchiu 2014-07-02 13:49:00

1

在1.9默認爲8K

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

注意哦,只要它運行的空間,並且需要重新分配,在1.9它分配成倍多個堆。

在1.8中它會分配越來越大的堆。

+0

問題是約1個時隙的大小(即,預設最低堆大小是10_000插槽,多大1個時隙) – glebm 2010-10-04 20:35:38

1

通過代碼陷之後:

1 slot是尺寸爲sizeof(struct RVALUE),這取決於在機器上。

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