gpt4 book ai didi

android - Zygote 预加载 vs boot.art 加载

转载 作者:太空狗 更新时间:2023-10-29 13:56:56 25 4
gpt4 key购买 nike

启动镜像加载(boot.oat、boot.art)

当 Android 启动时,它会加载一些 boot images,其中包含一些常用的类。特别是 boot.oat 包含类的代码,以及 boot.art 一些预初始化的堆。这加快了应用程序的启动速度,并由于分页机制节省了一些内存。 (更多详情 here )

合子预加载

在 ZygoteInit.java 中,有一个 preload功能。它预加载类、资源、共享库等。preloadClasses 特别加载在以下位置找到的类:/system/etc/preloaded-classes。这基本上会导致这些类的静态初始化程序运行。

它们有何不同?

两者有什么区别?boot.art 的唯一目的不是避免由 zygotespreload` 完成的显式初始化吗?

zygote 的 preload 难道不应该只为 imageless 启动而运行吗?

最佳答案

两者有什么区别? boot.art 的唯一目的不是避免由 zygote 的 preload` 完成的显式初始化吗?

boot.art 是一个燕麦文件。它包含 BOOTCLASSLOADER 中的所有类。 Oat 是一种特殊的 elf 格式。它是 ART VM 中的必要文​​件。它将在首次启动时生成或由制造商集成在手机中。

/system/etc/preloaded-classes 是一个包含将在 zygote 中初始化的类列表的文件。

zygote 的预加载不应该只为无图像启动运行吗?

boot.art 不是图像。

boot.art 是一个特殊的 oat 文件。它在BOOTCLASSLOADER中包含所有的jar包(framework.jar等)的类定义,在每个应用程序的内存中。 Android 将这些 jar 文件转换为 oat 文件以支持 ART VM。加载boot.art会将boot.art中的所有类定义加载到zygote进程的内存中。类在加载到内存后由 ClassLoader 初始化,它们通常在首次使用时初始化。

boot.art中的一些类几乎在每个应用程序中都会用到,所以我们可以在zygote中初始化它们,避免在每个应用程序中都初始化它们。 Preload会调用Class.forName方法来初始化/system/etc/preloaded-classes中的类。 Class.forName 初始化目标类中的静态 block 并进行其他初始化操作。预加载的结果实际上是内存更改,并且更改保留在 fork 进程中。因此预加载将节省类初始化时间。

关于android - Zygote 预加载 vs boot.art 加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38761334/

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