早教吧作业答案频道 -->其他-->
一个很旧的面试题。关于垃圾收集器的程序段3:1.Objectaobj=newObject();2.Objectbobj=newObject();3.Objectcobj=newObject();4.aobj=bobj;5.aobj=cobj;6.cobj=null;7.aobj=null;问:这段代码
题目详情
一个很旧的面试题。关于垃圾收集器的
程序段3:
1.Object aobj = new Object ( ) ;
2.Object bobj = new Object ( ) ;
3.Object cobj = new Object ( ) ;
4.aobj = bobj;
5.aobj = cobj;
6.cobj = null;
7.aobj = null;
问:这段代码中,第几行的内存空间符合垃圾收集器的收集标准?
答:第7行。注意这类题型是认证考试中可能遇到的最难题型了。
行1-3分别创建了Object类的三个对象:aobj,bobj,cobj
行4:此时对象aobj的句柄指向bobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。
行5:此时对象aobj的句柄指向cobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。
行6:此时仍没有任何一个对象符合垃圾收集器的收集标准。
行7:对象cobj符合了垃圾收集器的收集标准,因为cobj的句柄指向单一的地址空间。在第6行的时候,cobj已经被赋值为null,但由cobj同时还指向了aobj(第5行),所以此时cobj并不符合垃圾收集器的收集标准。而在第7行,aobj所指向的地址空间也被赋予了空值null,这就说明了,由cobj所指向的地址空间已经被完全地赋予了空值。所以此时cobj最终符合了垃圾收集器的收集标准。 但对于aobj和bobj,仍然无法判断其是否符合收集标准。
总之,在Java语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个:
1.给对象赋予了空值null,以下再没有调用过。
2.给对象赋予了新值,既重新分配了内存空间。
最后再次提醒一下,一块内存空间符合了垃圾收集器的收集标准,并不意味着这块内存空间就一定会被垃圾收集器收集。
问题:我的问题是第4行aobj = bobj不是aobj的引用已经是bobj的了吗,那么第一行 中的aobj = new Object();这里所产生的对象引用不就已经无法得到了吗,那么为什么不符合垃圾收集器标准
程序段3:
1.Object aobj = new Object ( ) ;
2.Object bobj = new Object ( ) ;
3.Object cobj = new Object ( ) ;
4.aobj = bobj;
5.aobj = cobj;
6.cobj = null;
7.aobj = null;
问:这段代码中,第几行的内存空间符合垃圾收集器的收集标准?
答:第7行。注意这类题型是认证考试中可能遇到的最难题型了。
行1-3分别创建了Object类的三个对象:aobj,bobj,cobj
行4:此时对象aobj的句柄指向bobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。
行5:此时对象aobj的句柄指向cobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。
行6:此时仍没有任何一个对象符合垃圾收集器的收集标准。
行7:对象cobj符合了垃圾收集器的收集标准,因为cobj的句柄指向单一的地址空间。在第6行的时候,cobj已经被赋值为null,但由cobj同时还指向了aobj(第5行),所以此时cobj并不符合垃圾收集器的收集标准。而在第7行,aobj所指向的地址空间也被赋予了空值null,这就说明了,由cobj所指向的地址空间已经被完全地赋予了空值。所以此时cobj最终符合了垃圾收集器的收集标准。 但对于aobj和bobj,仍然无法判断其是否符合收集标准。
总之,在Java语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个:
1.给对象赋予了空值null,以下再没有调用过。
2.给对象赋予了新值,既重新分配了内存空间。
最后再次提醒一下,一块内存空间符合了垃圾收集器的收集标准,并不意味着这块内存空间就一定会被垃圾收集器收集。
问题:我的问题是第4行aobj = bobj不是aobj的引用已经是bobj的了吗,那么第一行 中的aobj = new Object();这里所产生的对象引用不就已经无法得到了吗,那么为什么不符合垃圾收集器标准
▼优质解答
答案和解析
.自己写个程序测试一下就好了嘛
public class abcc {
/**
* @param args
*/
static int i=0;
int j;
public abcc()
{
// TODO Auto-generated constructor stub
j=i;
i++;
}
protected void finalize()
{
System.out.println(j);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Object aobj = new abcc ( );
Object bobj = new abcc ( );
Object cobj = new abcc ( );
System.gc();
System.out.println("第一次垃圾处理");
aobj = bobj;
System.gc();
System.out.println("第二次垃圾处理");
aobj = cobj;
System.gc();
System.out.println("第三次垃圾处理");
cobj = null;
System.gc();
System.out.println("第四次垃圾处理");
aobj = null;
System.gc();
System.out.println("第五次垃圾处理");
}
}
第四行明显会启动垃圾处理器 符合垃圾处理器的启动标准 所以这个题明显是错的....
如果面试的时候有人用这个为难你 你就用代码叫他闭嘴
public class abcc {
/**
* @param args
*/
static int i=0;
int j;
public abcc()
{
// TODO Auto-generated constructor stub
j=i;
i++;
}
protected void finalize()
{
System.out.println(j);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Object aobj = new abcc ( );
Object bobj = new abcc ( );
Object cobj = new abcc ( );
System.gc();
System.out.println("第一次垃圾处理");
aobj = bobj;
System.gc();
System.out.println("第二次垃圾处理");
aobj = cobj;
System.gc();
System.out.println("第三次垃圾处理");
cobj = null;
System.gc();
System.out.println("第四次垃圾处理");
aobj = null;
System.gc();
System.out.println("第五次垃圾处理");
}
}
第四行明显会启动垃圾处理器 符合垃圾处理器的启动标准 所以这个题明显是错的....
如果面试的时候有人用这个为难你 你就用代码叫他闭嘴
看了 一个很旧的面试题。关于垃圾收...的网友还看了以下:
命题“若a,b都是奇数,则a-b是偶数”的逆否命是()A.若a-b不是偶数,则a,b不都是奇数B. 2020-04-09 …
能判定△ABC∽△A′B′C′的条件是()A.ABA′B′=ACA′C′B.ABAC=A′B′A′ 2020-05-13 …
能说明△ABC∽△A′B′C′的条件是()A.ABA′B′=ACA′C≠BCB′C′B.ABAC= 2020-05-13 …
a,b是有理数,它们在数轴上的对应点的位置如下图所示,把a,-a,b,-b,a+b,a-b按照从小 2020-05-13 …
A为超声波发射与接收器,B为一小车,A发出的超声波射到B的壁上将会反射回来,设AB=s,超声波传播 2020-05-17 …
相似矩阵充分条件(见一道选择题)如果,则n阶矩阵A与矩阵B相似.A./A/=/B/B.r(A)=r 2020-05-21 …
验收测试的定义是(52)。A.由用户按照用户手册对软件进行测试以决定是否接收B.由某个测试机构代表 2020-05-26 …
城镇居民家庭总收入是指调查户中生活在一起的家庭成员在调查期得到的( )之和。 A.工资性收入B.经 2020-05-30 …
a、b、c表示三个数,则乘法结合律可以用()式子表示.A.(a+b)+c=a+(b+c)B.(a× 2020-07-31 …
下列各式中,能用平方差公式计算的是()A.(-a-b)(a+b)B.(-a-b)(a-b)C.(- 2020-07-31 …