No ha encontrado la respuesta aquí? Regístrate, preguntar y obtener una respuesta adecuada en cuestión de minutos!
  • Username:

Para poder verificar esta petición, por favor escribe en el campo de abajo lo siguiente: forodejava

Password:
Confirm Password:
Your Email:
Confirm Email:
Resultados 1 al 3 de 3
  1. #1
    Fecha de ingreso
    25 mar, 08
    Mensajes
    45
    Post Thanks / Like
    Poder de reputación
    0

    Predeterminado Ayuda con el metodo finalize()

    Hola a todos, tengo Objetos que manejan ciertos recursos, y lo necesito lograr que se liberen esos recursos cuando "estos objetos" se destruyan.
    He pensado en extender el metodo protected void finalize() throws Throwable"
    Leyendo el el api, me parece que es lo indicado.
    Código:
    protected void finalize()
    "Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. A subclass overrides the finalize method to dispose of system resources or to perform other cleanup." ...
    Pero aparentemente no logro el efecto deseado, por lo que realize la siguiente clase como "prueba de concepto".

    Código:
    package pruebas;
     
    public class Keyssi {
      public Keyssi() {
        X x = new X();  
        x = new X();   // Pierdo referencia anterior
        x = new X();   // Pierdo referencia anterior
      }
      public static void main(String[] args) {
        Keyssi keyssi1 = new Keyssi();
               keyssi1 = new Keyssi(); // Pierdo referencia anterior
               keyssi1 = null;         // Pierdo referencia anterior
      }
      class X {
        protected void finalize() throws Throwable{
          System.out.println("Finalize x");
          System.err.println("Finalize x");
          super.finalize();
        }
      }
    }
    Al ejecutar la clase no obtengo la salida "Finalize x".
    ¿Alguien podría explicarme por que o como se logra la ejecución de codigo en un finalize()?

    gracias de antemano.

    Juanito

    La solución completa para el hilo: aquí.


  2. #2
    Fecha de ingreso
    10 dic, 08
    Mensajes
    1
    Post Thanks / Like
    Poder de reputación
    0

    Predeterminado

    Hola Juanito: al final del método main agregá una llamada al garbage colector:
    Código PHP:
    System.gc(); 
    y la salida por pantalla será: "Finalize x" varias veces..
    Código PHP:
    public class Keyssi {
      public 
    Keyssi() {
        
    X x = new X();  
        
    = new X();   // Pierdo referencia anterior
        
    = new X();   // Pierdo referencia anterior
      
    }
      public static 
    void main(String[] args) {
        
    Keyssi keyssi1 = new Keyssi();
               
    keyssi1 = new Keyssi(); // Pierdo referencia anterior
               
    keyssi1 null;         // Pierdo referencia anterior
               
               
    System.gc();
      }
      class 
    {
        protected 
    void finalize() throws Throwable{
          
    System.out.println("Finalize x");
          
    System.err.println("Finalize x");
          
    super.finalize();
        }
      }

    saludos y espero que te sirva
    Última edición por danis; 29/09/2009 a las 01:10 Razón: El código va entre las llaves [CODE] y [/CODE] ;)

  3. #3
    Fecha de ingreso
    09 oct, 09
    Ubicación
    Córdoba - Argentina
    Mensajes
    222
    Post Thanks / Like
    Poder de reputación
    1428

    Predeterminado

    No ha encontrado la
    respuesta aquí?
    Regístrate, preguntar y
    obtener una respuesta
    adecuada en cuestión de minutos!


    Un registro de minutos: clic

    Sin publicidad para los miembros!
    Juanito, me parece que si fuera vos pensaria un poco mejor la logica del programa, porque creo que depender tus recursos de la libertad que tiene el GC para llevarse o no objetos de la memoria, lo va a hacer bastante inestable, incluso cuando corra en diferentes versiones de la JVM.

    Creo que tendrias que hacer una especie de Manager que controle las instancias de esos objetos y que analices cuando no los necesites mas para eliminarlos y liberar el recurso que ocupaban. Tenes que hacerlo de una manera mas controlada por VOS, no por el GC.

    Saludos!

Temas similares

  1. Ayuda al implementar método Model para un JButton
    Por lopezchr en el foro AWT-SWING
    Respuestas: 3
    Último mensaje: 22/09/2010, 18:58
  2. Ayuda porfavor metodo public void
    Por newjnet en el foro Java Básico
    Respuestas: 3
    Último mensaje: 05/09/2010, 06:55
  3. Ayuda con el metodo Random
    Por prisCR en el foro Java Básico
    Respuestas: 4
    Último mensaje: 06/07/2010, 19:37
  4. Ayuda con el metodo Random
    Por prisCR en el foro Java Básico
    Respuestas: 1
    Último mensaje: 05/07/2010, 03:56
  5. Ayuda urgente: metodo de newton y de biseccion en java
    Por davdragon en el foro Java Básico
    Respuestas: 0
    Último mensaje: 14/05/2009, 23:04

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •