Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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
如何确保垃圾收集器在android中正常工作?_Android - Fatal编程技术网

如何确保垃圾收集器在android中正常工作?

如何确保垃圾收集器在android中正常工作?,android,Android,我正在从事一个android项目,其中主要关注内存管理。 我有一个关于垃圾收集器角色的问题 **假设我有3个对象被视图持有,其中有一些更大的数据值n这些值随后被存储 1那么,垃圾收集器将如何以及何时释放/销毁对象。 在3个对象中,有2个对象将首先销毁哪个对象以及为什么要销毁?***当您不需要这些对象时,然后将其设置为空值。垃圾收集器将自动释放相应的资源。首先,您无法知道GC将在何处运行,也无法使用System.GC强制销毁。它可能会工作,也可能不会工作。您可以继续实现finalize方法,这可能

我正在从事一个android项目,其中主要关注内存管理。 我有一个关于垃圾收集器角色的问题

**假设我有3个对象被视图持有,其中有一些更大的数据值n这些值随后被存储

1那么,垃圾收集器将如何以及何时释放/销毁对象。
在3个对象中,有2个对象将首先销毁哪个对象以及为什么要销毁?***

当您不需要这些对象时,然后将其设置为空值。垃圾收集器将自动释放相应的资源。

首先,您无法知道GC将在何处运行,也无法使用System.GC强制销毁。它可能会工作,也可能不会工作。您可以继续实现finalize方法,这可能在一定程度上对您有所帮助。

如何回答比何时回答更容易。基本上,垃圾收集器检查对象的引用,并查看它是否仍被其他对象引用。它检查从对象到其根的引用路径。如果根目录未被任何类引用,则它有资格进行垃圾收集。因此,在设计应用程序时,非常重要的一点是,在应用程序中,要了解大对象被引用的位置,以及从任何引用点到GC的路径是否清晰。只有当我们有一个明确的GC路径时,您才能确定GC将完成他们的工作

现在,when是一个比较困难的部分,因为有几种垃圾收集算法,它们的行为都不同。下面提供了可用算法的一般概述。以下内容表明Android正在使用标记和扫描算法。谁先去的答案取决于给定特定算法的哪个对象有资格进行垃圾收集


由于我们无法控制GC,为了管理应用程序中的内存消耗,我们应该将重点放在确保我们创建的每个活动和对象(尤其是较大的活动和对象)在生命周期结束时都有资格进行垃圾收集,即确保所有活动和对象都有一条通向GC的清晰路径。正如您在许多文章和答案中看到的那样,将对象设置为null将有助于实现这一点

GC是Java语言的一部分。我想我们应该把它看作是最可靠的案例。

我刚进入SOF发表这个问题。非常感谢!假设我在使用后将所有这些设置为空。所以我的问题是:gargage collector将以什么顺序释放这些对象?在3个对象中,哪一个将首先发布?为什么?请访问以下链接以了解更多说明@狱卒,1998年的那篇文章已经完全过时了。非常感谢您的澄清。如果GC将使用任何一种算法,它将如何决定首先释放哪个对象。?