Java中的所有内容是否都符合垃圾回收的条件?

时间:2016-11-08 23:20:50

标签: java garbage-collection

只是在设置

时想知道是否这样
obj1 = null;

该对象符合gc的条件,具有空值的所有内容在技术上是否合格也是如此?

我特别想知道阵列,比如你有类似

的东西
[obj1, obj2, null, obj3, null, obj 4, obj5]

gc可以运行并删除空对象,因此元素为空吗?

2 个答案:

答案 0 :(得分:6)

垃圾收集收集对象,它不收集对象的引用。垃圾收集null的想法毫无意义。当一个对象不再有任何引用指向它时,GC在最简单的级别上做了什么,并且那时它将释放内存。它并不关心有多少引用指向null,它只关心对象有多少传入引用。

不,GC永远不会从数组中删除空值。这不是它的作用。除此之外,数组中的空值完全有效,删除它会破坏许多程序。

答案 1 :(得分:1)

没有" null对象",null是空引用存在的最接近的东西。关键定义在Java语言规范中,4.3.1. Objects

  

对象是类实例或数组。

     

参考值(通常只是引用)是指向这些的指针   对象,以及一个特殊的空引用,它不引用任何对象。

obj1 = null;将引用变量obj1更改为null。如果它先前引用了一个对象,它就不再这样做了。

可能有其他引用引用该对象,因此对象仍然可以访问,垃圾收集器将不管它。如果obj1是对象的最后一个引用,则它不再可访问,并且有资格进行最终确定。