In the following code, which is the earliest statement, where the object originally held in e, may be garbage collected:
1.public class Test {
2. public static void main (String args []) {
3. Employee e = new Employee("Bob", 48);
4. e.calculatePay();
5. System.out.println(e.printDetails());
6. e = null;
7. e = new Employee("Denise", 36);
8. e.calculatePay();
9. System.out.println(e.printDetails());
10. }
11.}Only One:
1) Line 10
2) Line 11
3) Line 7
4) Line 8
5) Never
Answer:3
为什么不是Line 6呢???
我自己的理解是:判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个:
1.给对象赋予了空值null,以下再没有调用过。
2.给对象赋予了新值,既重新分配了内存空间。
到Line6时,已经符合1了,所以我会选择Line6.可是答案是第七行啊??为什么啊????
1.public class Test {
2. public static void main (String args []) {
3. Employee e = new Employee("Bob", 48);
4. e.calculatePay();
5. System.out.println(e.printDetails());
6. e = null;
7. e = new Employee("Denise", 36);
8. e.calculatePay();
9. System.out.println(e.printDetails());
10. }
11.}Only One:
1) Line 10
2) Line 11
3) Line 7
4) Line 8
5) Never
Answer:3
为什么不是Line 6呢???
我自己的理解是:判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个:
1.给对象赋予了空值null,以下再没有调用过。
2.给对象赋予了新值,既重新分配了内存空间。
到Line6时,已经符合1了,所以我会选择Line6.可是答案是第七行啊??为什么啊????
个人理解
e是否被别的对象引用好像也无法判断,所以答案也就没有给
所以最早在第7行被回收
在java中一个对象可以被多个对象引用
只有在该对象不再被引用时才会垃圾收集例如
A a=new A()
A b =null;
b=a;
这样就有两个对new A()对象的引用
当a=null;时
new A()对象依然被b引用,是不会垃圾收集的所以
6. e = null; //这里不调用e.finalize()方法,jvm只是把e对象标记为不引用
7. e = new Employee("Denise", 36); //这时才能确定e原来的对象被永久抛弃,他将会被kill
JVM不到内存感觉不够用的时候,一般是不会开始回收的