Java 当Singleton不为null时,Singleton对象中的包装器变量是否可以被垃圾收集?
在这个单例实例中,当单例实例仍然不为null时,这个Java 当Singleton不为null时,Singleton对象中的包装器变量是否可以被垃圾收集?,java,android,null,garbage-collection,wrapper,Java,Android,Null,Garbage Collection,Wrapper,在这个单例实例中,当单例实例仍然不为null时,这个private Long severDate会变成垃圾收集吗 我在Android应用程序中遇到了这个问题。想知道Android操作系统如何释放未使用的单个内存值 public class DataHolder { private static DataHolder self; private Long severDate; private int numb; public static synchroni
private Long severDate
会变成垃圾收集吗
我在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;
}
}
在“Long severDate”引用它之前,GC不会删除它。现在,这完全取决于用例是否在某些类中创建了这个单例类的实例。
注意:在android中,确保你用onCreate方法创建这个类的obj。直到“Long severDate”引用它,GC才会删除它。现在,这完全取决于用例是否在某些类中创建了这个单例类的实例。
注意:在android中,确保你用onCreate方法创建这个类的obj。由于
DataHolder
实例保留的内存包含对Long
对象的引用,在分配给self
的内存释放之前,引用的内存不能释放。这就是整个代码吗serverDate
从未使用过?与其他变量相比,很少使用此长值。有时,用户可以让Android应用程序在后台运行约1/2小时,然后再次使用。我怀疑在这段时间内,整个DataHolder对象可能会被垃圾收集。然而,我仍然无法证明这一点。只是想知道Android内存优化是否可以在这之前释放单个变量的内存。@Eugene从未使用过,它只在用户下订单时使用。但应用程序中到处都在使用数据持有者引用。只有此serverDate的getter可能不会频繁使用。另外,根据逻辑,在初始赋值之后,这个值不可能得到null值,我不会再修改这个值。我已经证实了这一点。垃圾收集和杀死(并重新启动)一个应用程序是有区别的。在后一种情况下,该字段将为null
,因为您没有为其值实现持久性(其初始值为null
)。由于数据持有者
实例保留的内存包含对长
对象的引用,在分配给self
的内存释放之前,引用的内存无法释放。这就是整个代码serverDate
从未使用过?与其他变量相比,很少使用此长值。有时,用户可以让Android应用程序在后台运行约1/2小时,然后再次使用。我怀疑在这段时间内,整个DataHolder对象可能会被垃圾收集。然而,我仍然无法证明这一点。只是想知道Android内存优化是否可以在这之前释放单个变量的内存。@Eugene从未使用过,它只在用户下订单时使用。但应用程序中到处都在使用数据持有者引用。只有此serverDate的getter可能不会频繁使用。另外,根据逻辑,在初始赋值之后,这个值不可能得到null值,我不会再修改这个值。我已经证实了这一点。垃圾收集和杀死(并重新启动)一个应用程序是有区别的。在后一种情况下,该字段将为null
,因为您没有为其值实现持久性(其初始值为null
)。