2010-10-04 17 views
5

Por lo tanto, la documentación rubí empresa afirma que todos los valores de los ajustes de GC se definen en las ranuras: http://www.rubyenterpriseedition.com/documentation.html#_garbage_collector_performance_tuningrecolección de elementos Rubí tamaño de la ranura Montón

(por ejemplo RUBY_HEAP_MIN_SLOTS)

Hemos afinado tamaño de la ranura min de nuestra aplicación e incremente para el mejor rendimiento por prueba y error (tenemos suficientes máquinas para tener una buena idea de cómo diferentes valores afectan la cantidad de llamadas malloc y GC completos).

Pero algo me ha estado molestando por un tiempo: ¿Qué tan grande es 1 ranura en bytes?

Respuesta

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

¿Cuál es el BGF? ¿Qué significa '$ 1 =' en este contexto? ¿En qué unidades está "40"? –

+0

'p' =' print'; '$ 1' es el valor de retorno; '40' es el tamaño en bytes: http://en.wikipedia.org/wiki/Sizeof – arrtchiu

1

El defecto en 1.9 es 8K

http://svn.ruby-lang.org/repos/ruby/trunk/gc.c (búsqueda de HEAP_SIZE)

Nota así que cada vez que se queda sin espacio y necesita reasignar, en 1.9 se asigna de manera exponencial más montones.

En 1.8 asignaría montones más grandes y más grandes.

+0

La pregunta es sobre el tamaño de la ranura 1 (es decir, el valor por defecto min tamaño de la pila es 10_000 ranuras, lo grande que es de 1 ranura) – glebm

1

Después diggin' a través del código:

1 slot es un tamaño de sizeof(struct RVALUE), que depende de la máquina.

4

De fuente 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 
Cuestiones relacionadas