【发布时间】:2020-11-15 18:12:18
【问题描述】:
在这个Singleton 实例中,这个private Long severDate 是否可以在singleton 实例仍然不为null 的情况下被垃圾回收?
我在 Android 应用程序中遇到了这种情况。想知道 Android 操作系统以某种方式释放未使用的单个内存值。
public class DataHolder {
private static DataHolder self;
private Long severDate;
private int numb;
public static synchronized DataHolder getInstance() {
if (self == null) {
self = new DataHolder();
}
return self;
}
}
【问题讨论】:
-
由于
DataHolder的实例保留的内存包含对Long对象的引用,因此在分配给self的内存释放之前,引用的内存无法释放。跨度> -
这就是整个代码?
serverDate从未被使用过吗? -
@aminography 与其他变量相比,这个 Long 值很少使用。有时,用户可以让 Android 应用程序进入后台约 1/2 小时,然后再次使用它。我怀疑在那段时间可能整个 DataHolder 对象可能会被垃圾收集。但是,我仍然无法证明这一点。只是想知道Android内存优化是否可以在此之前从单个变量中释放内存。
-
@Eugene 没用过,只有在用户下单的时候才会用到。但是 DataHolder 引用在应用程序的任何地方都被使用。只有这个 serverDate 的 getter 可能不会经常使用。另外,根据逻辑,在初始赋值后,这个值是不可能得到空值的,我再也没有修改过这个值。我已经确认过了。
-
垃圾收集和杀死(和重新启动)应用程序是有区别的。在后一种情况下,该字段将为
null,因为您没有为其值实现持久性(其初始值为null)。
标签: java android null garbage-collection wrapper