Android L中的合子过程仍在做什么?


13

我正在尝试找出Dalvik和ART运行时中的特定差异。我意识到ART不再使用Dalvik VM,但是,在安装Android L预览版后我注意到的第一件事是合子进程仍在运行。如果他们真正摆脱了Dalvik VM,那难道会使合子过程无用吗?此外,在检查通过AOSP发布的源代码后,仍然保留了大部分Dalvik。


1
很难知道,它是开发人员发布的版本,并且是完整的FAR。目前有很多Kitkat / Jellybean缝在一起,只是为了使其工作和启动。
RossC

仍然是“开发人员预览 ”,推测确实确实没有多大意义(尽管我遵循Dan的解释)。它可能如Dan所述,或者可能是“遗留”但尚未“完全淘汰”。当它仍在L-Release上运行时,情况就不同了。
伊齐

Answers:


14

Zygote并没有真正与Dalvik捆绑在一起,它只是一个初始化过程。Zygote是Android用于启动应用程序的方法。无需从头开始每个新进程,而是在每次要启动应用程序时重新加载整个系统和Android框架,它只需执行一次该过程,然后在Zygote完成特定于应用程序的任何操作之前就停止。然后,当您要启动应用程序时,Zygote进程会分叉,子进程将从上次停止的地方继续,将应用程序本身加载到VM中。

尽管此方法最初是为Dalvik设计的,但没有理由ART的行为不应完全相同。它无需在运行时JIT编译应用程序,但仍要加载许多与应用程序无关的Java东西(即整个Android框架),因此在使用相同的fork-when-时加载方法以启动新进程。

在如此大的项目中很自然,在后达尔维克世界中,还有来自达尔维克的其他遗留物仍然有用,因此您不应该惊讶于最初编写的其他代码是其中一部分或与Dalvik合作,ART仍然可以使用。


符合我对Zygote(非开发人员)的理解。从“用户角度”看,可能更容易将Zygote视为“应用程序服务器”,充当应用程序和OS之间的“抽象层”(某种程度上像HAL那样抽象硬件):没关系什么是“下面”(Dalvik或ART),界面处理“东西”?
伊齐

1
将Zygote视为应用程序服务器可能会更容易,但这不是一个非常准确的描述。它只是启动应用程序的OS的一部分,并且在应用程序OS边界的OS端非常多。
Dan Hulme 2014年

谢谢,所以至少我的“基本理解”是正确的(我知道“应用程序服务器”不准确,但是更容易被“普通用户”理解–因此,让我们将其称为“应用程序服务 ”,以进一步完善它) OS端;)
Izzy

源代码中存在的不是“剩菜剩饭”,而且我们还没有进入后达尔维克时代!Dalvik位代码仍然是正在使用的IR。即使设置为最高,也并非所有内容都是AOT编译的,并且仍然需要解释一些内容。因此,对于这些,有DalvikVM。同样,存储空间低的设备将使用更少的AOT来解释更多信息。最后,合子初始化了常用类的堆,这可以节省空间,因为它们可以在多个应用程序之间共享。
Paschalis 2015年

@Paschalis,您将JIT编译与DalvikVM混淆了。仅仅因为ART的较新版本可以进行JIT(即时)编译,并不意味着Dalvik仍然存在。Oracle Java也执行JIT编译,并不意味着它使用Dalvik
Martin Konecny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.