2010-10-04 6 views
5

Ainsi, la documentation d'entreprise Ruby affirme que toutes les valeurs des paramètres du GC sont définis dans les fentes: http://www.rubyenterpriseedition.com/documentation.html#_garbage_collector_performance_tuningRuby Garbage Collection Heap taille Slot

(par exemple RUBY_HEAP_MIN_SLOTS)

Nous peaufiné notre application la taille de l'emplacement de min et incrémenter la meilleure performance par essais et erreurs (nous avons assez de machines pour avoir une bonne idée de la façon dont différentes valeurs affectent le nombre d'appels malloc et de GCs complets).

Mais quelque chose m'embête depuis un moment: Quelle est la taille d'un slot en octets?

Répondre

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

Qu'est-ce que gdb? Que signifie "$ 1 =" dans ce contexte? Dans quelles unités est "40"? –

+0

'p' =' print'; '$ 1' est la valeur de retour; '40' est la taille en octets: http://en.wikipedia.org/wiki/Sizeof – arrtchiu

1

La valeur par défaut 1.9 est 8K

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

Notez bien que chaque fois qu'il manque d'espace et doit réattribuer, 1.9, il alloue des tas de façon exponentielle plus.

Dans 1.8, il serait allouer des tas de plus en plus gros.

+0

La question est de la taille de 1 emplacement (à savoir la valeur par défaut min taille du tas est 10_000 machines à sous, la taille est 1 slot) – glebm

1

Après Diggin' dans le code:

1 slot est une taille de sizeof(struct RVALUE), qui dépend de la machine.

4

De la source 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