Java中的解构函数?

时间:2014-10-20 09:52:57

标签: java destructor

我的java应用程序在没有静态变量的情况下无法工作,我在应用程序中声明了大量的静态变量。但是,有一个问题:java中是否有任何解构函数可用于释放这些静态变量所使用的内存? 有一个Statement变量,我可以使用close()来释放一些内存。 我想知道,调用stmt.close()方法时会发生什么? PS:这可能是通过为对象(myStaticObject=null)提供空值而调用System.gc()来完成这项工作吗?

4 个答案:

答案 0 :(得分:3)

如果你想释放静态字段x的内存,那么是的,只需设置

即可
x = null;

除非极少数情况下,您不必担心自己打电话给垃圾收集器:系统会为您做这件事,并且在适当的时候通常比您更了解。

所有这一切,一个包含大量静态字段的程序通常是一个警示标志,表明设计并不完全正确。好的设计通常(并非总是)将字段与实例相关联。您至少应该问自己是否应该重新构建代码。

答案 1 :(得分:3)

亲爱的AnkitNeo你自己给出了答案。

通过将变量设置为null并调用

System.gc();

你将释放记忆。但是,不保证System.gc()实际上会进行垃圾收集。根据这篇文章:When does System.gc() do anything大多数时候系统会垃圾收集。我相信如果当前CPU负载很高,它就不会GC。

答案 2 :(得分:1)

Java语言没有解构函数,因为它有自己的垃圾收集,这可以减轻程序员为不再引用的变量手动释放内存的速度。

stmt.close将关闭Statement对象使用的所有数据库资源。它不告诉垃圾收集器不再使用引用。

是的,您可以在关闭所有资源后调用一次System.gc()(尽管这不能保证GC线程立即采取行动),并且在将null分配给引用之后。但是,单独分配null通常足以告诉GC线程在不需要显式运行GC的情况下不再引用该变量。

答案 3 :(得分:0)

您可以覆盖finalize()方法。如果JVM收集了对象,它将被执行。但是,没有保证的方法来控制项目的收集。调用System.gc()大部分时间都可以工作,具体取决于JVM的想法。

简而言之,您所说的内容大部分时间都可以使用。

希望这会对你有所帮助。