只是在设置
时想知道是否这样obj1 = null;
该对象符合gc的条件,具有空值的所有内容在技术上是否合格也是如此?
我特别想知道阵列,比如你有类似
的东西[obj1, obj2, null, obj3, null, obj 4, obj5]
gc可以运行并删除空对象,因此元素为空吗?
答案 0 :(得分:6)
垃圾收集收集对象,它不收集对象的引用。垃圾收集null的想法毫无意义。当一个对象不再有任何引用指向它时,GC在最简单的级别上做了什么,并且那时它将释放内存。它并不关心有多少引用指向null,它只关心对象有多少传入引用。
不,GC永远不会从数组中删除空值。这不是它的作用。除此之外,数组中的空值完全有效,删除它会破坏许多程序。
答案 1 :(得分:1)
没有" null对象",null是空引用存在的最接近的东西。关键定义在Java语言规范中,4.3.1. Objects:
对象是类实例或数组。
参考值(通常只是引用)是指向这些的指针 对象,以及一个特殊的空引用,它不引用任何对象。
obj1 = null;
将引用变量obj1
更改为null。如果它先前引用了一个对象,它就不再这样做了。
可能有其他引用引用该对象,因此对象仍然可以访问,垃圾收集器将不管它。如果obj1
是对象的最后一个引用,则它不再可访问,并且有资格进行最终确定。