字符串常量池中的对象是否符合垃圾回收的条件?

时间:2018-02-09 08:07:34

标签: java string

完成计算方法后,有多少对象符合垃圾回收的条件?

我已经搜索了这个问题,答案是1.

public void compute(Object p)

    {

     Object a = new Object();

     int x = 100;

     String str = "abc";

    }

但据我所知,字符串常量池现在是Java 7中堆的一部分,并且有资格进行垃圾回收。

据我所知,2个对象有资格进行垃圾收集,即astr

1 个答案:

答案 0 :(得分:3)

对象的创建方式并不重要。

唯一重要的是:对象活着

换句话说:当一个对象的最后一个引用不再使用时(或者该引用的持有者不再活着),该对象就有资格进行垃圾回收。 / p>

无法再访问在方法中本地创建的对象 - 当方法返回时,它不再处于活动状态。例如,如果该方法将a添加到某些(仍然存在)" global"例如列表。

关于str,存在多种误解:

  • 没有创建String对象:字符串文字进入常量池。如果您使用new String("abc")例如,那将是一个不同的故事。在你的情况下:没有对象,因此没有该字符串的垃圾收集。
  • str正在举行参考。没有垃圾收集用于引用,仅用于对象。