Java中使用什么方法来销毁对象
你能给我举一个例子来回答我的问题吗?没有一个方法本身。垃圾收集器释放对象时,可以调用顶级Java中使用什么方法来销毁对象,java,Java,你能给我举一个例子来回答我的问题吗?没有一个方法本身。垃圾收集器释放对象时,可以调用顶级对象中定义的finalize()方法,但这不是一种可以依赖的行为。Java不支持确定性实例终结(即C++的析构函数)。Java有一个垃圾收集器,您可以调用它(如下面的Runtime.getRuntime().gc()),但是当您不进行内存清理时,垃圾收集的运行时往往工作得最好。对不起,Java中并没有真正的“空闲”或“处置”等价物 您所能做的最好的事情就是将对象设置为null(删除引用)。然后明确地告诉垃圾收
对象中定义的finalize()
方法,但这不是一种可以依赖的行为。Java不支持确定性实例终结(即C++的析构函数)。Java有一个垃圾收集器,您可以调用它(如下面的Runtime.getRuntime().gc()
),但是当您不进行内存清理时,垃圾收集的运行时往往工作得最好。对不起,Java中并没有真正的“空闲”或“处置”等价物
您所能做的最好的事情就是将对象设置为null(删除引用)。然后明确地告诉垃圾收集器你要去rambo(它在java.lang.Runtime
中的某个地方)。这解释了垃圾收集(为什么不必在java中明确删除对象)的工作原理:
查看它,问一个后续问题是否有帮助。Java自动处理其所有动态内存分配和释放。实际上,任何不再被命名变量引用的内存都可以进行垃圾收集(没有匿名变量)。当引用该内存的所有变量都设置为其他变量或超出范围时,就会出现这种情况
垃圾收集将自动进行,但没有任何内存块实际被释放的具体时间
大多数人不需要知道更多,但之前发布的链接以直观的格式为有兴趣了解更多信息的人提供了大量详细信息。不再可访问的Java对象占用的内存可能会被虚拟机的内存回收。正如其他人所指出的,这是自动的。相反,程序的正常操作可能会分配某些必须显式释放的系统资源。本机屏幕资源就是一个例子。部分此类方法包括:
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
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()
*包括子类
当对象符合垃圾收集器的条件时,“对象销毁”由java中的jvm自动完成
例如
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;
}
}
已经有很多非常类似的问题,请参见,还有更多问题。发帖前做一点搜索。我想这也是一个类似的问题。也别忘了!;)Java不像C#。。。Rambo评论中没有IDisposable.dispose().+1这样的东西。链接现在已断开,事实上该站点上的所有链接都已断开。编辑:使用web.archive页面更新