• Jueves 14 de Noviembre de 2024, 19:02

Autor Tema:  Eliminar Objetos  (Leído 1260 veces)

alemag

  • Miembro MUY activo
  • ***
  • Mensajes: 180
    • Ver Perfil
Eliminar Objetos
« en: Sábado 25 de Noviembre de 2006, 00:23 »
0
Saludos compañeros, tuve que cambiar el codigo de mi aplicacion y lo estoy haciendo todo con clases en lugar de con metodos, y por lo tanto ahora me queda todo con new ... (), new ... () pero va todo demasiado lento comparado con antes, y me imagino que es porque esos objetos se acumulan en memoria sin destruirse. Como puedo eliminarlos ??? Por favor ayudadme o dadme alguna idea.
Gracias

robertogt

  • Miembro activo
  • **
  • Mensajes: 97
  • Nacionalidad: gt
    • Ver Perfil
    • http://robertux.wordpress.com
Re: Eliminar Objetos
« Respuesta #1 en: Sábado 25 de Noviembre de 2006, 07:19 »
0
Yo tenia entendido que Java eliminaba la memoria automaticamente, pero sino, podés probar con "delete", pero esto no se usa igual que C++ sino estoy mal. alguien puede aclarar esto un poco más??, tambien tengo mis dudas acerca de esto. saludos
Un dia sin sol es como, ya sabes, ... noche

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Eliminar Objetos
« Respuesta #2 en: Sábado 25 de Noviembre de 2006, 08:05 »
0
En cada pasada del recolector automático de basura(automatic garbage collector), este eliminará todos los objetos que ya no posean referencia alguna, es decir, aquellos objetos a los cuales ya no exista forma de acceder. Puedes utilizar también la función finalize() para realizar alguna acción adicional cuando el AGC valla a destruir un objeto, por ejemplo liberar otros recursos que no sean memoria utilizados por el objeto que se va a destruir.
Por otro lado no controlamos en qué momento se va a destruir un objeto, es decir, no sabemos cuando va a ser llamado el evento finalize(), por lo que si el recurso es crítico deberías liberarlo por otro método.

No se si exista una forma directa de descargar objetos, por lo menos no la conozco.
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Eliminar Objetos
« Respuesta #3 en: Sábado 25 de Noviembre de 2006, 14:42 »
0
NO hay forma directa de liberar la memoria en java, eso es responsabilidad y a discreción del GC.

Lo de la lentitud lo mas probable es que se deba a un problema de tu implementación y ya que hablas de lo que estas haciendo me siembras serias dudas sobre la calidad de la misma. Mejor coloca el código para que lo revisemos.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

silverfox

  • Miembro MUY activo
  • ***
  • Mensajes: 280
    • Ver Perfil
Re: Eliminar Objetos
« Respuesta #4 en: Lunes 27 de Noviembre de 2006, 09:31 »
0
Hola...

En la primera edición del libro Thinking in Java (te remito a la primera, porque en las siguientes lo quitaron, según el autor, porque lo consideraban poco informativo  :o ), había unas tablas de tiempos de instrucciones en Java.

Aunque en Java no se puede hablar de duraciones e ciclos de reloj, como nuestros amigos de C, aquí se habla de duración en relación con la operación suma. (una suma = duración 1)

Como resultado, y por lo que creo que tu programa va tan lento, es que la operación new tiene un tiempo de 250 (= 250 ops suma) y es la más cara de todas las operaciones en Java.

En cuanto al recolector de basura, hay varias formas de llamarlo lo cual no garantiza que vaya a pasar inmediatamente.

Echa un vistazo a los métodos gc() de Runtime y System, y al método runFinalization() de System, que sirven para tener (cierto) control sobre el recolector de basuras.

También existen algunos argumentos para la JVM que te permiten cambiar la política del recolector, te recomiendo que busques por la red.


Un saludo y espero que la parrafada te sirva de algo.




Silverfox