Java中是否可以删除手动对象?

时间:2013-09-21 04:14:54

标签: java object garbage-collection

在某些语言中,如Python,有一些方法我们可以明确地从堆中“删除”一个对象。例如:

s = "This is a Test"
del s

现在,对象s不能再使用了。现在,我的问题是,我们可以在Java做类似的事吗?是的,我知道它是垃圾收集的,在大多数情况下这是一个巨大的优势,但如果我想手动删除一个对象呢?顺便说一下,Python中的del实际上是删除了对象,还是删除了引用变量?在此先感谢您的帮助!

5 个答案:

答案 0 :(得分:1)

  

我们可以在Java中做类似的事情吗?

没有

最多可以使对象无效:

s = null;

这将标记垃圾收集的对象,并且在尝试使用它时(除非为其分配新值),您将获得NullPointerException

s = null;
...
s.foo(); //this will throw a NullPointerException

答案 1 :(得分:1)

在java中肯定我们无法删除对象...但我们可以尝试使用System.gc();或者如果我们想要丢失对象的引用,我们可以设置对象引用的值null; ..但是在设置空值后我们无法访问该对象,但它仍然保留在内存中......

答案 2 :(得分:1)

通常,您需要对对象的所有引用设置为null,之后不再使用该对象,并且将在下一个GC上删除该对象。但是像“This is a Test”这样的字符串常量对象存储在池中,即使没有对它们的引用也不会被删除。

答案 3 :(得分:1)

一旦超出范围,该对象将从堆中删除。您可以将s括在使用它的最小可能范围内。即,要么封闭在{}大括号内,要么定义一个单独使用它的方法

答案 4 :(得分:0)

正如Luiggi Mendoza所说,你不能手动删除。你怎么能把它推荐给NULL。 要释放内存,可以调用System.gc()。但无法保证释放内存。 从内存中删除对象之前垃圾收集线程调用该对象的finalize()方法,并提供执行任何类型清理所需的机会。