Angel: No es un tema de tiempo, mas que nada de memoria y limites en el tamaños de la tabla de objetos en el ObjectMemory.
En Dolphin por defecto el limite es bastante bajo, 8 millones y pico de objetos. Se puede agrandar patcheando el image pero a veces genera cierta inestabilidad (Me a pasado en win7 64 mas que nada no se que tendra que ver). Digamos que hago el calculo un par de veces y como todo es un objeto, suma todo el ambiente, metodos, strings, etc y llegas muy rápido al limite si es que te zarpas. En Squeak con Cog inclusive la vm viene limitada a 512 mb así que si te pasas de eso te sale un lindo cartelito. Se llega bastante fácil a eso. Creo que VW debe ser el mas preparadito, hasta donde recuerdo la configuración de memoria era una Strategy o algo asi. No se cuales son los limites reales, quizás Andres nos pueda contar. Bueno, por ultimo decir que es obvio como decía Diego que no nos hace falta tener todos estos objetos pero que a veces surgen estos problemas y en algunos casos no se pueden atacar en forma tan transparente, y eso jode. Saludos Gallego El día 3 de mayo de 2012 17:04, Angel Java Lopez <[email protected]> escribió: > Hola gente! > > Bien, fui entendiendo... Pero lo que no me quedo claro es: > > - Cual es el problema de tener 3 millones de instancias de float? > > Digo, en que se nota? > > 1 - En performance? > 2 - O da en algun momento: falta memoria? > > Si es el primer caso, es por el tiempo de creacion de los objetos? Como se > midio que era por eso? > > 2012/5/3 GallegO <[email protected]> >> >> Hola: >> >> Les respondo aclarando la situación. >> >> Ya implemente un flyweight para cuando traigo floats de la base de >> datos. Luego de observar los resultados llegue a la conclusión que por >> perfomance, en mi caso particular, no valía la pena el flyweight (que >> lo habia implementado con un WeakSet). La mayoría de mis valores eran >> 0.0, entonces simplemente evito el 0.0, cuando viene un 0.0 >> instanciado por el driver, en el lugar donde se mapea eso a los >> objetos directamente si viene 0.0 lo descarto y al objeto le pongo el >> SmallInteger 0, simple y rápido. Si se pone peludo algun día tenes la >> posibilidad de hacer eso e incluso hacerlo para Date, Time, TimeStamp >> e incluso String. >> >> Pero el problema que tengo es en unos objetos que calculamos en >> memoria para un periodo x de tiempo. Por ejemplo calcular la >> producción de 30 dias de 5000 pozos, suponiendo que cada producción >> tiene 20 valores numericos que mantiene en variables de instancia, eso >> te da unos 3 millones de instancias de Float. >> >> Ahora, entiendo perfectamente que podemos trabajar ahí también para >> evitar tener todo eso calculado, o evitar tener al menos tantos Float >> 0.0 pero por como están programados todos los cálculos se hace muy >> complicado (y feo) manejar esto en todos lados. De ultima que cada >> seter de las variables de instancias pongo codigo que maneje un >> flyweight o el Float zero al menos, pero es algo feo feo. >> >> Por eso pregunto por algo "transparente" como seria poder modificar la >> VM o las primitivas al menos, que en mi caso por ser Dolphin no puedo. >> >> Recién veo el mail de Juan Vuletich, en Dolphin tengo FloatArray >> tambien. Calculo que en vez de variables de instancia podría tener un >> array de estos en mis objetos y los accessors que apunten a cada una >> de las posiciones del array. No se si te referis a que es posible ese >> uso. Ja! no me imagino lo que tendría que testear... >> >> De todas maneras tener en Smalltalk reflexividad sobre la >> instanciacion como los Symbol estaría buenísimo. >> >> Bueno, viendo esta perspectiva ¿que me sugieren? :D >> >> Saludos >> GallegO >> >> El día 3 de mayo de 2012 14:16, Angel Java Lopez >> <[email protected]> escribió: >> > Interesante tema/problema.. >> > >> > Por que hay millones de float? Yo me imagino algun calculo, pero igual >> > luego >> > el garbage collector deberia liberarlos. El problema es la memoria? se >> > acaba? Se necesitan los millones de floats, digo, que esten >> > referenciados y >> > no sean liberados por el GC? no habra forma de cambiar el algoritmo? O >> > el >> > problema es el tiempo (mucho tiempo creando) y no la memoria? >> > >> > 2012/5/3 [email protected] <[email protected]> >> > >> >> Hola GallegO, >> >> Supongo que habrás hecho un flyweight y es lo que generalmente me >> >> sirvió. Tal vez si contarás un poco mas surjan mas ideas, en las cosas >> >> que me topé terminé por darme cuenta que los números son muchísimos >> >> menos que los que parecen, en matemática son infinitos pero en la >> >> compu no, y en la realidad mucho menos. >> >> >> >> Abrazo >> >> >> >> Diego >> >> >> >> On 3 mayo, 13:04, GallegO <[email protected]> wrote: >> >> > Gente: >> >> > >> >> > Quería saber si alguien se le ocurre de que forma uno puede evitar la >> >> > instanciación de Float en Dolphin, o si se les ocurren en cualquier >> >> > Smalltalk en forma transparente. Tengo un problemita con algunos >> >> > millones de floats. En algunos lados lo puedo solucionar con un >> >> > lightweight pero cuando se usan primitivas en un calculo estoy al >> >> > horno. >> >> > >> >> > Gracias por su ayuda :) >> >> > >> >> > Saludos >> >> > GallegO >> >> >> >> -- >> >> 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 >> >> -- >> 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 -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org
