Sacar la basura
Java, gracias a dios, abstrae al programador de la tarea de gestionar la memoria. Pero como todo en la vida, esto tiene un precio: alguien se tiene que encargar de ello por nosotros. Quien? Garbaje Collector (GC en adelante), o como yo lo llamaría el camión de la basura. Camión de la basura? Joder, este tío se ha vuelto idiota. Pues no. La analogía tiene cierto sentido:
Si vemos al GC como un camión de la basura, entonces que somos nosotros? Pues ni más ni menos el hijo pequeño que se encarga de sacar la basura de su familia hasta el contenedor mas próximo. Como? Si, en nuestro código podemos tirar objetos a la basura. Dos maneras:
- miObjeto = null;
- miObjeto = new OtraClaseViable();
El problema esta en que el camión pasará cuando le venga en gana, o puede que incluso no pase. Así es el GC: imprevisible. Alguna solución? Si, podemos tratar de llamar al ayuntamiento para avisar de que queremos que se recoja la basura. Dos maneras:
- System.gc();
- Runtime.getRuntime().gc();
Un último punto, que pasa si queremos asegurarnos de que lo que tiro a la basura no se lleva consigo cosas de valor? Podemos decir al basurero que abra la basura y compruebe que no quede nada de valor. En que se traduce esto: sobrescribir el método finalize(). Este método garantiza que será invocado antes de que el objeto sea llevado por el camión de la basura al vertedero, aunque con varias peculiaridades:
- finalize() solo será invocado una única vez: si reclamamos nuestro objeto de vuelta, la próxima vez que se marque como basura el método finalize() no se ejecutará.
- no te fíes del basurero y menos del finalize(), si tiras algo a la basura asegúrate antes de que realmente no se lleva nada de valor, sin esperar o confiar en este método.
Día inspirado ;)
Para tutoriales de verdad :