2010-03-21 19 views
8

¿Puede darme un ejemplo para mi pregunta?¿Qué método en Java se usa para destruir sus objetos?

+7

Ya hay un montón de preguntas muy similares, véase http://stackoverflow.com/questions/2450855/how-do-you-write-a-deconstructor-in- java, http://stackoverflow.com/questions/171952/is-there-a-destructor-for-java, http://stackoverflow.com/questions/2450855/how-do-you-write-a-deconstructor- in-java y muchos más. Haga una pequeña búsqueda antes de publicar. –

+1

Creo que http://stackoverflow.com/questions/2450855/how-do-you-write-a-deconstructor-in-java es una pregunta similar, también. ¡No te olvides de http://stackoverflow.com/questions/2450855/how-do-you-write-a-deconstructor-in-java, tampoco! ;) –

+0

Java no es como C# ... No existe tal cosa como IDisposable.dispose(). – devinbost

Respuesta

3

No hay un método per se. El método finalize(), definido en el nivel superior Object, puede invocarse cuando el recolector de basura desasigna el objeto, pero este no es un comportamiento en el que pueda confiar.

3

Java no admite la finalización de instancias determinísticas (es decir, los destructores de C++). Java tiene un recolector de basura que usted puede invocar (como este Runtime.getRuntime().gc()), pero los tiempos de ejecución recogidos de basura tienden a funcionar mejor cuando se deja solo la limpieza de la memoria.

40

Lo sentimos, pero no hay realmente un equivalente "libre" o "disponer" en Java.

Lo mejor que puede hacer es simplemente establecer el objeto en nulo (elimina la referencia). Luego explícitamente dile al recolector de basura que vas a rambo (está en algún lugar en java.lang.Runtime).

+35

+1 para la observación de Rambo. – cbmeeks

3

Esto explica como la recolección de basura (¿por qué usted no tiene que borrar objetos de forma explícita en Java) funciona: http://web.archive.org/web/20080205091525/http://chaoticjava.com/posts/how-does-garbage-collection-work/

comprobar que funciona, hacer una pregunta de seguimiento si ayudaría.

+2

El enlace ahora está roto, de hecho todos los enlaces en ese sitio están rotos.Editar: actualizado con la página web.archive – stanek

+1

gracias, stanek. – corprew

0

Java maneja automáticamente toda su asignación de memoria dinámica y desasignación. Esencialmente, cualquier memoria que ya no se referencia por una variable nombrada se convierte en elegible para la recolección de basura (no hay variables anónimas). Este será el caso cuando todas las variables que se refieren a esa memoria estén configuradas en otra cosa o salgan del alcance.

La recolección de basura se realizará de forma automática, pero no hay un momento específico en el que se eliminará la memoria.

La mayoría de las personas no necesitarán saber más que eso, pero el enlace previamente publicado por corprew brinda una buena cantidad de detalles en un formato intuitivo para cualquier persona interesada en aprender más.

16

La memoria ocupada por objetos Java que ya no se puede acceder puede ser reclamada por la máquina virtual garbage collector. Como otros han notado, esto es automático. Por el contrario, la operación normal de un programa puede asignar ciertos recursos del sistema que deben liberarse explícitamente. Los recursos de pantalla nativa son un ejemplo. Un parcial list de tales métodos inlcudes siguientes:

 
java.awt.Component.BltBufferStrategy#dispose() 
java.awt.Component.FlipBufferStrategy#dispose() 
java.awt.CompositeContext#dispose() 
java.awt.Graphics#dispose() 
java.awt.im.InputContext#dispose() 
java.awt.im.spi.InputMethod#dispose() 
java.awt.image.BufferStrategy#dispose() 
java.awt.Image#flush() 
java.awt.PaintContext#dispose() 
java.awt.Window#dispose() 
java.io.InputStream#close()* 
java.io.OutputStream#close()* 
java.sql.Connection#close() 
java.util.Timer#cancel() 
javax.imageio.ImageReader#dispose() 
javax.imageio.ImageWriter#dispose() 
javax.print.StreamPrintService#dispose() 
javax.security.sasl.SaslClient#dispose() 
javax.security.sasl.SaslServer#dispose() 
javax.swing.DebugGraphics#dispose() 
javax.swing.JInternalFrame#dispose() 
org.ietf.jgss.GSSContext#dispose() 
org.ietf.jgss.GSSCredential#dispose() 
* Includes subclasses 
0

"objeto destory" se realiza automáticamente por JVM en java, cuando el objeto es elegible para el colector de basura.

por ejemplo ..

public class gc{ 
    public static void main(String []s){ 
    gc obj=new gc(); 
    gc obj1=new gc(); 
    // if u made manually obj1=null. its eligible for garbage collection else jvm done automatically when this obj1 not in use.. 

     obj1=null; 
} 
} 
Cuestiones relacionadas