Que hacés Valloud, sabía que ibas a responder :). No se si cambió algo en 7.7.1 (estoy con 7.6 por ahora), pero en la doc no encontré algo específico sobre esto (tal vez lo pasé por alto). Igual no sabía del memory monitor, gracias por el dato. Ahora, desde el punto de vista teórico, que debería suceder? Digo, así uno aprende un poco mas sobre el GC. Recuerdo en algunas cosas que implementé que VW andaba como piña en eso de reusar objetos "muertos" del mismo tamaño (lease, dejar de referenciar un array de 10 slots y crear uno nuevo de ese tamaño era mas barato que cachearlo a mano, cosa que me sorpendió bastante). La pregunta es, eso funca igual en large space? En las pasadas de scavenge del GC hasta debería ser mas rápido un array solo (ya que sólo queda el header en eden/survivor) lo que me da un poco de miedo es que se termine llamando al compacting gc muchas veces por la creación de muchas matrices. Pero bueno, será cosa de probar y ve que onda, de última son dos mensajes que tengo que cambiar en la implementación de la matriz :).

Saludos y gracias,
        Andrés


Andres Valloud escribió:
Agranda large space (fijate en ObjectMemory class>>sizesAtStartup)
para que esos objetos enormes siempre entren ahi.  Para mas
informacion, bajate VW 7.7.1 y lee doc/technotes/vwmemorymgmt.pdf.
Tambien podes usar el package MemoryMonitor en el public store
repository para ver lo que anda sucediendo.  Acordate que hoy (pero no
mañana, eh? :)...) el GC no mueve objetos a large space si se cayeron
a old space.

Andres.

2010/10/21 andres <[email protected]>:
Consulta: tengo que diseñar un objeto que va a trabajar con una matriz
de bits. Para la matriz de bits planeo usar un bytearray subyacente,
usando máscaras para setear/leer los bits. Ahora bien, conviene usar un
solo array (potencialmente gigante) o una array de arrays? Mi
preocupación tiene obviamente que ver con el GC y la forma en la que VW
maneja los objetos pesados.

Un poco de contexto:
- Las matrices pueden ser de diversos tamaños y no sería extraño algo
tipo 1000x1000 (o sea que no sería loco pensar en un byte array de 250K).
- Es posible que se creen y destruyan muchas matrices durante el proceso
de cómputo (y honestamente preferiría no tener que limpiar y cachear a
mano).

En principio me incliné por un array de arrays, me parece mas fácil a la
hora de manejar chunks de memoria, pero por otro lado los objetos tipo
Image están implementados con un byte array gigante y ahí me surgió la
duda. Alguien hizo algún tipo de benchmarking en el tema de
alocar/desalocar objetos de esos tamaños?

--
Saludos y gracias,
       Andrés

--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]

http://www.clubSmalltalk.org


--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]

http://www.clubSmalltalk.org

Responder a