垃圾收集载入画面
Garbage collection loading screen
我的 android 申请中有两项活动。当我从第一个 activity 切换到第二个 activity 时,gc 开始并使第二个 activity 滞后直到完成。我决定制作一个闪屏(加载屏幕),在 gc 完成之前不会关闭,但我不知道如何以编程方式获取 gc 状态。有class吗?请让我知道我怎样才能得到这个场景!
首先,在 Android 中,垃圾收集由 ART - Android 运行时或 DVM - Dalvik 虚拟机(在旧设备上)组织。由于 ART/Dalvik 本质上是 JVM 的专用版本,它们具有与 GC 类似的方法,因此它仅由系统而不是由用户管理。
Hence, you don't get to control the garbage collection in Android.
的确,您可以调用 System.gc()
,但既不保证也不推荐这样做。您应该完全忘记垃圾收集过程并将其交给系统。
虽然你无法控制它,但你仍然有责任管理内存并尽可能防止过度使用内存。一些提示,您应该考虑:
- 处理完大对象后立即释放它们(删除指向它们的硬引用);
- 根据您的需要利用多线程,线程将以并行方式更快地工作(尤其是在多核处理器上);
- 优化您的算法,如果操作不当,即使是基本的列表迭代也可能会减慢进程并泄漏内存
我认为@Serj 的回答总结得很好。如果您保留旧 activity 的实例,并且因此它仍然被引用,直到设置启动画面,您可能会找到一种触发 GC 的解决方法。然后你删除最后的引用并希望 GC 被调用——但它可能会在稍后被调用。如何查看 GC 的状态是一个很好的问题,也许您可以读出内存并查看其是否已满?
最好的建议是仅在需要对象的范围内重构和使用对象。
谢谢大家的解答。经过一些工作后,我发现了代码中的问题。
我正在使用新实例在 while 循环中执行此异步 class。所以它保持内存增加,两小时后它开始挂起,或者当 activity 切换 gc 执行时。
我的 android 申请中有两项活动。当我从第一个 activity 切换到第二个 activity 时,gc 开始并使第二个 activity 滞后直到完成。我决定制作一个闪屏(加载屏幕),在 gc 完成之前不会关闭,但我不知道如何以编程方式获取 gc 状态。有class吗?请让我知道我怎样才能得到这个场景!
首先,在 Android 中,垃圾收集由 ART - Android 运行时或 DVM - Dalvik 虚拟机(在旧设备上)组织。由于 ART/Dalvik 本质上是 JVM 的专用版本,它们具有与 GC 类似的方法,因此它仅由系统而不是由用户管理。
Hence, you don't get to control the garbage collection in Android.
的确,您可以调用 System.gc()
,但既不保证也不推荐这样做。您应该完全忘记垃圾收集过程并将其交给系统。
虽然你无法控制它,但你仍然有责任管理内存并尽可能防止过度使用内存。一些提示,您应该考虑:
- 处理完大对象后立即释放它们(删除指向它们的硬引用);
- 根据您的需要利用多线程,线程将以并行方式更快地工作(尤其是在多核处理器上);
- 优化您的算法,如果操作不当,即使是基本的列表迭代也可能会减慢进程并泄漏内存
我认为@Serj 的回答总结得很好。如果您保留旧 activity 的实例,并且因此它仍然被引用,直到设置启动画面,您可能会找到一种触发 GC 的解决方法。然后你删除最后的引用并希望 GC 被调用——但它可能会在稍后被调用。如何查看 GC 的状态是一个很好的问题,也许您可以读出内存并查看其是否已满? 最好的建议是仅在需要对象的范围内重构和使用对象。
谢谢大家的解答。经过一些工作后,我发现了代码中的问题。 我正在使用新实例在 while 循环中执行此异步 class。所以它保持内存增加,两小时后它开始挂起,或者当 activity 切换 gc 执行时。