gpt4 book ai didi

android - ART 在什么条件下压缩堆?

转载 作者:IT老高 更新时间:2023-10-28 21:49:33 61 4
gpt4 key购买 nike

Android 5.0+ 中 ART 运行时的一个被吹捧的功能是堆压缩,以减少堆 fragment 。 fragment 堆可以更容易地获得 OutOfMemoryErrors,因为可能没有一个连续的空闲内存块足以满足您的需求,即使整个堆有足够的可用空间。

我了解,当应用移动到后台时,会发生这种情况,基于 Google session 演示等。但是,我可以在 the documentation 中找到的唯一声明说:

Homogeneous space compaction is free-list space to free-list space compaction which usually occurs when an app is moved to a pause imperceptible process state. The main reasons for doing this are reducing RAM usage and defragmenting the heap.

从技术上讲,尚不清楚“暂停不可察觉的进程状态”究竟是什么意思。

假设某个应用目前没有任何前台 Activity 。开发人员是否做了任何可能阻止该应用程序进程的堆压缩的事情?例如,是否有前台服务 block 堆压缩?

最佳答案

拼图。

据我所知,ART 将压缩任何暂停 2-3 秒的内容,暂停意味着当前不在后台运行,因此 Activity ,但不运行服务。它还可以即时压缩,或者在应用处于前台时同时压缩。

Currently, the event that triggers heap compaction is ActivityManager process-state changes. When an app goes to background, it notifies ART the process state is no longer jank “perceptible.” This enables ART do things that cause long application thread pauses, such as compaction and monitor deflation.

Chet Hasse状态:

Garbage Collection
ART brought improved garbage collection dynamics. For one thing, ART is a moving collector; it is able to compact the heap when a long pause in the application won’t impact user experience (for example, when the app is in the background and is not playing audio). Also, there is a separate heap for large objects like bitmaps, making it faster to find memory for these large objects without wading through the potentially fragmented regular heap. Pauses in ART are regularly in the realm of 2–3ms.

据我所知,应用程序中的任何暂停对 ART GC 来说都是公平的游戏。

我怀疑应用程序需要完全暂停所有服务等,才能发生压缩,因为它正在重新分配堆的内存地址,并且要发生这种情况,它不能改变。因为在应用程序暂停期间而不是在运行时采取的这个更大的紧凑是堆的动态重新排列。可以在较小的暂停中进行的唯一更改是重新路由不再使用的进程上的一些地址。

虽然这是一个有根据的猜测,但不是确定的,我会努力获取更多信息。

source code here should have the answer .他们正在使用像 InJankPerceptibleProcessState() 这样的命名并试图通过这个,因为你可能已经有了自己。

阅读它,当/如果我找到明确的答案时会更新答案。

关于android - ART 在什么条件下压缩堆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39582638/

61 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com