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?
答案 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不会收集学生对象)