选择题
5. 有如下代码:
10.public Object m(){
11.Object o=new Float(3.1f);
12.Object[]oa=new()bject[1];
13.oa[0]=o;
14.o=null;
15.oa[0]=null;
16.print 'return 0';
17.}
当Float对象在第11行被创建后,______能够被垃圾回收。
【正确答案】
C
【答案解析】 具体而言,垃圾回收器主要负责完成3项任务:分配内存、确保被引用对象的内存不被错误地回收以及回收不再被引用的对象的内存空间。
垃圾回收器的存在,一方面把开发人员从释放内存的复杂的工作中解脱出来,提高了开发人员的生产效率;另外一方面,对开发人员屏蔽了释放内存的方法,可以避免因为开发人员错误地操作内存从而导致应用程序的崩溃,保证了程序的稳定性。但是,垃圾回收也带来了问题,为了实现垃圾回收,垃圾回收器必须跟踪内存的使用情况,释放没用的对象,在完成内存的释放后还需要处理堆中的碎片,这些操作必定会增加JVM的负担,从而降低程序的执行效率。
对于对象而言,如果没有任何变量去引用它,那么该对象将不可能被程序访问,因此,可以认为它是垃圾信息,可以被回收。只要有一个以上的变量引用该对象,该对象就不会被垃圾回收。
对于本题而言,首先,在第11行定义了一个Float对象o,接着,在第13行把这个对象的引用赋值给数组oa[0]的第一个元素,此时这个Float对象有两处被引用的地方,分别为o和oa[0];在第14行中执行o=null后,这个Float对象仍然被oa[0]引用,在执行完第15行后这个Float对象没有被任何变量引用了,因此,就具备了被垃圾回收器回收的条件。所以,选项C正确。