你能给我一个关于我的问题的例子吗?
你能给我一个关于我的问题的例子吗?
抱歉,在Java中没有真正等价于“free”或“dispose”的方法。
你所能做的最好的事情就是将对象设置为null(删除引用)。然后明确告诉垃圾收集器你要进行操作(它在java.lang.Runtime
中的某个地方)。
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() * 包括子类
其实并没有一种特定的方法。在顶层的Object
中定义的finalize()
方法可能会在对象被垃圾回收器释放时调用,但这并不是您可以依赖的行为。
Java不支持确定性实例终结(即C++的析构函数)。Java有一个垃圾收集器,可以通过代码 Runtime.getRuntime().gc()
调用,但是垃圾收集器运行时最好让内存清理自己完成。
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自动处理所有动态内存分配和释放。基本上,任何不再被命名变量引用的内存都将成为垃圾收集的候选对象(没有匿名变量)。当所有引用该内存的变量被设置为其他值或超出其作用域时,就会发生这种情况。
垃圾收集将自动进行,但没有特定的时间来实际释放任何一块内存。
大多数人不需要知道更多,但之前由corprew发布的链接以直观的格式提供了很多详细信息,适合任何有兴趣学习更多的人。