Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当Singleton不为null时,Singleton对象中的包装器变量是否可以被垃圾收集?_Java_Android_Null_Garbage Collection_Wrapper - Fatal编程技术网

Java 当Singleton不为null时,Singleton对象中的包装器变量是否可以被垃圾收集?

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

在这个单例实例中,当单例实例仍然不为null时,这个
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
)。