没有静态变量,我的java应用程序无法工作,我在应用程序中声明了大量的静态变量。但是,有一个问题:在java中有任何解构函数可以用来释放这些静态变量所使用的内存吗?有一个Statement变量,我可以使用close()来释放一些内存。我想知道,当调用stmt.close()方法时,到底会发生什么?PS:通过向对象(myStaticObject=null)提供一个空值并调用System.gc()来完成这项工作,这是可能的吗?
发布于 2014-10-20 10:00:22
亲爱的AnkitNeo,你自己给了答案。
通过将变量设置为null并调用
System.gc();你会释放记忆的。但是,不能保证System.gc()实际上是垃圾收集。根据这篇文章:When does System.gc() do anything大多数时候系统都会垃圾收集。我相信如果目前CPU负载很高,它就不会是GC了。
发布于 2014-10-20 09:56:32
如果您想释放静态字段x的内存,那么可以,只需设置
x = null;除了在非常罕见的情况下,您不需要担心自己调用垃圾收集器:系统会为您做到这一点,并且通常比您更清楚地知道何时这样做是合适的。
尽管如此,一个包含大量静态字段的程序通常是一个警告信号,表明设计不太正确。良好的设计通常(并不总是)将字段与实例关联起来。您至少应该问问自己是否应该重构代码。
发布于 2014-10-20 09:59:03
Java语言没有解构函数特性,因为它有自己的垃圾收集,这使程序员不必为不再引用的变量手动释放内存。
stmt.close将关闭Statement对象使用的所有数据库资源。它不会告诉垃圾收集器不再使用引用。
是的,您可以在关闭所有资源(虽然这不能保证GC线程立即操作)和将null分配给引用之后调用一次null。但是,单独分配null通常就足以告诉GC线程,如果不需要显式运行GC,就不再引用变量。
https://stackoverflow.com/questions/26462821
复制相似问题