Android L'de zigot işlemi hala ne yapıyor?


13

Dalvik ve ART çalışma zamanlarındaki belirli farklılıkları anlamaya çalışıyorum. ART'ın artık Dalvik VM'yi kullanmadığını anlıyorum, ancak Android L önizlemesini yükledikten sonra fark ettiğim ilk şeylerden biri, zigot işleminin hala çalışıyor olmasıydı. Dalvik VM'den gerçekten kurtulurlarsa, bu zigot sürecini işe yaramaz hale getirmez mi? Ayrıca, AOSP aracılığıyla yayınlanan kaynak kodunu inceledikten sonra, Dalvik'in büyük bir kısmı hala kalmaktadır.


1
Bilmesi zor, bu bir geliştirici sürümü ve tamamıyla FAR. Şu anda sadece çalıştırılması ve önyüklenmesi için birçok Kitkat / Jellybean dikişli.
RossC

Hala bir "geliştirici önizlemesi " olarak, spekülasyon yapmak pek mantıklı olmayabilir (Dan'ın açıklamasını takip etsem de). Dan'ın tarif ettiği gibi olabilir veya henüz "tamamen kullanılmamış" bir "geride" olabilir. Hala L-Release üzerinde çalıştığında, bu farklı bir şey.
Izzy

Yanıtlar:


14

Zygote gerçekten Dalvik ile bağlantılı değil, sadece bir init süreci. Zygote, Android'in uygulamaları başlatmak için kullandığı yöntemdir. Her yeni işlemi sıfırdan başlatmak zorunda kalmak yerine, tüm sistemi ve Android çerçevesini bir uygulamayı her başlatmak istediğinizde yeniden yüklemek yerine, bu işlemi bir kez yapar ve ardından Zygote uygulamaya özel bir şey yapmadan önce bu noktada durur. . Daha sonra, bir uygulamayı başlatmak istediğinizde, Zygote işlemi çatallanır ve alt süreç kaldığı yerden devam eder ve uygulamanın kendisini VM'ye yükler.

Bu yöntem başlangıçta Dalvik için tasarlanmış olsa da, ART'ın aynı şekilde davranmaması için hiçbir neden yoktur. Uygulamaları çalışırken JIT-derlemek zorunda değildir, ancak yine de yüklenecek çok sayıda uygulamadan bağımsız Java öğesi (yani tüm Android çerçevesi) vardır, bu nedenle aynı çatalları kullanmanız mantıklıdır. yeni süreçleri başlatmak için yüklü yöntem.

Öylesine büyük bir projede doğal ki, Dalvik sonrası bir dünyada hala yararlı olan Dalvik'ten başka sollar olacaktı, bu yüzden orijinal olarak bir parçası olmak ya da parçası olmak için yazılmış başka bir kod olduğuna şaşırmamalısınız. ART'ın kullanımı için hala Dalvik ile çalışmak.


Zygote anlayışımla eşleşiyor (geliştirici olmayan). "Kullanıcı görünümünden", Zygote'u uygulamalar ve işletim sistemi arasında bir "soyutlama katmanı" gibi davranarak (uygulama bir şekilde HAL'ın soyut donanımı yaptığı gibi) düşünmeyi kolaylaştırır: önemli değil ne "aşağıda" (Dalvik veya ART), arayüz "şeyler" ile ilgilenir?
Izzy

1
Zygote'u bir uygulama sunucusu olarak düşünmeyi kolaylaştırabilir, ancak çok doğru bir açıklama değildir. İşletim sisteminin yalnızca uygulamaları başlatan kısmıdır ve uygulama-OS sınırının işletim sistemi tarafında çok fazladır.
Dan Hulme

Teşekkürler, bu yüzden en azından benim "temel anlayış" doğruydu ("uygulama sunucusu" doğru değil, "normal bir kullanıcı" tarafından anlaşılması daha kolay olduğunu biliyorum - bu yüzden daha fazla getirmek için "uygulama hizmeti " yapalım OS tarafı;)
Izzy

Kaynak kodunda var olan "soldan çıkışlar" değildir ve Dalvik sonrası dönemde değiliz! Dalvik bit kodu hala kullanılan IR'dir. En yüksek ayarda bile, her şey AOT uyumlu değildir ve hala yorumlanması gereken bazı şeyler vardır. Yani, bunlar için DalvikVM var . Ayrıca, depolama alanı düşük olan cihazlar daha az AOT yorumu kullanacaktır. Son olarak, zygote sık kullanılan sınıfların yığınlarını başlatır, bu da birden fazla uygulama arasında paylaşılabildiklerinden yerden tasarruf edebilir.
Paschalis

@Paschalis, JIT'in DalvikVM ile derlenmesini karıştırıyorsunuz. ART'ın daha yeni sürümlerinin JIT (tam zamanında) derlemesi yapması, Dalvik'in hala etrafta olduğu anlamına gelmez. Oracle Java da JIT derlemesi yapıyor, Dalvik kullandığı anlamına gelmiyor
Martin Konecny
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.