完成计算方法后,有多少对象符合垃圾回收的条件?
我已经搜索了这个问题,答案是1.
public void compute(Object p)
{
Object a = new Object();
int x = 100;
String str = "abc";
}
但据我所知,字符串常量池现在是Java 7中堆的一部分,并且有资格进行垃圾回收。
据我所知,2个对象有资格进行垃圾收集,即a
和str
。
答案 0 :(得分:3)
对象的创建方式并不重要。
唯一重要的是:对象活着?
换句话说:当一个对象的最后一个引用不再使用时(或者该引用的持有者不再活着),该对象就有资格进行垃圾回收。 / p>
无法再访问在方法中本地创建的对象 - 当方法返回时,它不再处于活动状态。例如,如果该方法将a
添加到某些(仍然存在)" global"例如列表。
关于str
,存在多种误解:
new String("abc")
例如,那将是一个不同的故事。在你的情况下:没有对象,因此没有该字符串的垃圾收集。str
正在举行参考。没有垃圾收集用于引用,仅用于对象。