3

假设我有一个这样定义的片段:

public class MyFragment extends Fragment {
   private static String sample = "";

   public static void setSample(String s) {
      sample = s;
   }
}

在应用程序的生命周期内,是否会收集垃圾样本(无论是否存在对 MyFragment 的任何引用——我认为这无关紧要)?

4

3 回答 3

4

你是对的,实例的数量MyFragment无关紧要。

sample只要加载的类加载器处于活动状态,该变量就会有效地成为 GC 根MyFragment

重要的是要注意变量永远不会被垃圾收集 -对象是。

于 2012-08-06T15:20:22.087 回答
3

只要类没有被卸载,样本变量就不会被垃圾回收。

当且仅当其定义的类加载器可以被垃圾收集器回收时,类或接口才能被卸载,如第 12.6 节中所讨论的。引导加载程序加载的类和接口可能不会被卸载

于 2012-08-06T15:21:12.353 回答
2

private static String sample

当它在你的代码中第一次被引用(类加载器加载它)时将开始存在,并且将独立于现有的对象引用而保持活动状态。

于 2012-08-06T15:23:05.833 回答