Java匿名对象和垃圾收集部分-2

时间:2015-03-16 16:21:17

标签: java garbage-collection anonymous

private Student student = new Student();

public Student getStudent(){
    return student;
}


public void function(){
   getStudent().setName("john");
}

public void function(){
   Student student_local = getStudent();
   student_local.setName("john");
}
  

对于两个剪辑,GC的行为是否都不同?

     

我的意思是哪种情况(CASE-1 / CASE-2)更具GC效率   时间?

     

我是否会为CASE-1调用简单的GC?

2 个答案:

答案 0 :(得分:1)

阿米特我已经看到了你的另一个问题,重要的是永远只有可达性,与你如何使用学生并不重要,它总是可以到达,直到包含它的班级可以到达。

更新,关于您添加的问题:

  

我的意思是哪种情况(CASE-1 / CASE-2)在时间方面更具GC效率?

两者都没有,因为你在两个函数中都做了同样的事情,并且记住你不知道什么时候会收集你的对象,这对于这类例子来说并不重要。

阅读GC工作原理的说明:http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/

编辑:应该学习阅读问题,阅读我的答案的这个修订版,对不起阿米特。

答案 1 :(得分:1)

在所有这三种情况下,方法function()对在类初始化时实例化的实例变量进行操作。这意味着在所有情况下方法student完成后,实例变量function将继续保持对对象Student的引用,因此该对象不会成为垃圾回收的候选对象。这也意味着这些代码片段在垃圾收集方面的效率将是相同的(因为在所有情况下方法完成后GC不会收集学生对象)