Java中的解构器?

Java中的解构器?,java,destructor,Java,Destructor,没有静态变量,我的java应用程序无法工作,我在应用程序中声明了大量静态变量。但是,有一个问题:java中有没有解构器可以用来释放这些静态变量使用的内存? 有一个语句变量,我可以使用close()来释放一些内存。 我想知道,调用stmt.close()方法时会发生什么? PS:通过向对象提供空值(myStaticObject=null)并调用System.gc()将完成此任务,这是可能的吗?如果要释放静态字段x的内存,那么是的,只需设置 x = null; 除了极少数情况外,您不必担心自己调用

没有静态变量,我的java应用程序无法工作,我在应用程序中声明了大量静态变量。但是,有一个问题:java中有没有解构器可以用来释放这些静态变量使用的内存? 有一个
语句
变量,我可以使用
close()
来释放一些内存。 我想知道,调用
stmt.close()
方法时会发生什么?
PS:通过向对象提供空值(
myStaticObject=null
)并调用
System.gc()
将完成此任务,这是可能的吗?

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

x = null;
除了极少数情况外,您不必担心自己调用垃圾收集器:系统会为您这样做,并且通常比您更清楚何时适合这样做


尽管如此,一个包含大量静态字段的程序通常是一个警告信号,表明设计不太正确。好的设计通常(并非总是)将字段与实例相关联。您至少应该问问自己是否应该重新构造代码。

Java语言没有解构器功能,因为它有自己的垃圾收集功能,这样程序员就不用为不再引用的变量手动释放内存

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


是的,您可以在关闭所有资源(尽管这并不保证gc线程立即执行操作)之后,以及在为引用分配
null
之后,调用一次性
System.gc()
。但是,单独分配
null
通常足以告诉GC线程不再引用变量,而无需显式运行GC。

亲爱的AnkitNeo您自己已经给出了答案

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

System.gc();
你将释放内存。但是,并不能保证System.gc()实际上会进行垃圾收集。根据这篇文章:大多数时候系统都会进行垃圾收集。我相信,如果当前CPU负载非常高,它就不会是GC。

有一个
finalize()
方法可以覆盖。如果JVM收集了对象,则将执行该操作。然而,没有保证的方法来控制项目的收集。调用
System.gc()
大部分时间都有效,这取决于JVM的想法

简言之,你所说的大部分时间都会起作用


希望这对你有帮助

使应用程序在没有大量静态变量的情况下工作。没有解构器。只需让您的变量可用于垃圾收集器。Java为您处理垃圾收集,您必须让它们可用于收集。Java中没有析构函数概念。这里的内存管理是自动的,JVM正在这样做。哈!我只是确认一下。谢谢你的回答@AnkitNeo手动调用垃圾收集器几乎肯定是个坏主意。真的,除非你有非常明确的理由,否则不要这样做。只要设置为null就足以允许系统在需要时回收内存。我将强化@chiatic security的观点,即使您认为有非常明确的理由这样做,也不要这样做。我在应用程序代码中看到的对System.gc()的100%调用都是bug。Java有
finalize()
方法,有点像析构函数。