Me repite valores de objeto.
Hola les cuento, que tengo que llenar una lista de objetos pero al pesarle el valor del objeto a la lista me repite el mismo
para todos. acá pongo el código y lo platico para que puedan entender mas.
he probado agregando el usernew = new user(); dentro del for algo asi
el problema de esto es que crea cada que entra una instancia, este solo es un ejemplo porque en realidad manejo mas de medio millon de registros y cuando hago lo que anteriormente comentaba, me aparece un error de memoria en java OutOfMemoryError. el problema se resuelve si lo saco del for pero me deja el mismo valor.
resultado de la consola.
valor de==a10s
valor de==a10s
valor de==a10s
valor de==a10s
valor de==a10s
espero puedan darme una mano, saludos.
- Inicie sesión o regístrese para enviar comentarios
estas guardando el mismo
estas guardando el mismo objeto usernew por eso se repite la propiedad anio para todos.
podrias guardar la propiedad anio en el list y ya no guardas el objeto.
y no hagas ciclos tan grandes para crear objetos por la memoria que se te acaba ,guarda una parte y continuas .
Hola julgo
Hola julgo
Gracias por responder, el problema que tengo es que necesito guardar en la lista un objeto en cada espacio de la lista (no solo la propiedad del objeto) el cual contiene aprox 13 propiedades distintas al anio (nombe.apellido, edad, etc), es por eso que creaba un objeto en cada ciclo de for para no repetir el valor, pero al realizar aprox 20 mil objetos la memoria termina.
he probado invocar al GC System.gc() pero sigo con el problema de la memoria.
como me sugieres que haga esta parte tomando en cuenta que son registros de mas de 200 personas.
gracias
Para tu último ciclo
Para lo último que acabas de ejemplificar:
Y ya, no veo porqué invocar al GC si la creación de tus objetos la haces desde dentro del ciclo, así cada iteración te crea un objeto nuevo.
Hola neko069 Gracias por el
Hola neko069
Gracias por el comentario, así como ejemplificas el for es como actualmente se encuentra en producción pero el problema viene cuando creo mas de 50 mil objetos me arroja un error de memoria OutOfMemoryError .
como ya comente antes el problema viene al crear demasiados objetos para agregarlos a la lista, una cosa que no mencione y podría ser importante es que trabajo con WebSphere 6.0 y con JDK 1.4. ya que es una aplicación web que tiene tiempo de creada.
gracias
se me ocurren varias maneras
se me ocurren varias maneras una simple por ejemplo un for dentro de otro for que dividen los 50000 en 5 partes no se como estas trabajando pero tampoco voy a estar puliéndome en los detalles prueba y comentas
Lo he probado
julgo de echo ya habia probado esa manera de dividirlo en partes, pero al llegar a los 20000 me lanza el mismo error sin importar que invoque al GB al terminar el segundo for.
comentas que se te ocurren varias maneras cual seria otra?
gracias por el apoyo
pero has probado con el
pero has probado con el código que puse donde primero guardo los datos y después vacio la lista.
estas manteniendo los objetos vivos de alguna manera
ese ultimo código que
ese ultimo código que publicas invoca al recolector pero sigues usando la lista con lo cual crece y crece y sigue manteniendo los objetos dentro de ella
Si lo probe
julgo lo he probado sin el gc pero la parte de que limpie la lista cada que termina un ciclo de 1000 por ejemplo, no creo que sea posible porque al final cuando tenga el total tengo que pasarlo a un archivo en excel y después el navegador me dirá si quiero abrirlo o guardarlo (es una aplicación web jsp).
pensaba tal vez en lugar de guardarlo en una tabla (porque no me dejaran hacerlo) y si fuera posible porque no he revisado aun irlo guardando en un excel que este en el disco y después al terminar todo llamar al excel y que el navegador me permita descargarlo. (es solo una idea)
como ves julgo? o que harías tu?
muchas gracias por comentar pasa que ya he sacado muchos bugs de esa aplicación XD.
asi como dices ir guardándolo
asi como dices ir guardándolo en el Excel y al final si no quieres usarlo mas pues lo puedes eliminar , pero no te olvides de vaciar siempre la lista , prueba si no lo has hecho con tu forma .