假设我有一个这样定义的片段:
public class MyFragment extends Fragment {
private static String sample = "";
public static void setSample(String s) {
sample = s;
}
}
在应用程序的生命周期内,是否会收集垃圾样本(无论是否存在对 MyFragment 的任何引用——我认为这无关紧要)?
假设我有一个这样定义的片段:
public class MyFragment extends Fragment {
private static String sample = "";
public static void setSample(String s) {
sample = s;
}
}
在应用程序的生命周期内,是否会收集垃圾样本(无论是否存在对 MyFragment 的任何引用——我认为这无关紧要)?
你是对的,实例的数量MyFragment
无关紧要。
sample
只要加载的类加载器处于活动状态,该变量就会有效地成为 GC 根MyFragment
。
重要的是要注意变量永远不会被垃圾收集 -对象是。
只要类没有被卸载,样本变量就不会被垃圾回收。
当且仅当其定义的类加载器可以被垃圾收集器回收时,类或接口才能被卸载,如第 12.6 节中所讨论的。引导加载程序加载的类和接口可能不会被卸载
private static String sample
当它在你的代码中第一次被引用(类加载器加载它)时将开始存在,并且将独立于现有的对象引用而保持活动状态。