Android uygulamaları yorumlandığından beri iOS uygulamaları android uygulamalarından daha hızlı mıdır?


31

Android uygulamaları derlenmiş yerine yorumlanır. Bu onları çalışma zamanında iOS uygulamalarından daha yavaş yapar mı?


14
O var değil Android uygulamaları nedeniyle iyi bir soru değildir yorumlanmış gibi, doğru cevap aslında dikkat çekiyor.
Aaron,

2
Normalde, kabul edilen yanıtın en iyi cevap olmaması, çok fazla bir sorun değildir, çünkü amaç, soruyu kim sorduysa yardım etmektir ( bu meta postayı görün). Ancak bu oldukça aşırı bir durumdur @ArmonSafai Doğru olarak seçtiğiniz cevap yanlış bilgi dolu ve düzenlemelerle kurtarılabilir olma noktasının ötesinde. Lütfen başka bir cevap seçmeyi düşünün.
Selali Adobor

Bazı büyük şirketlerin - IBM dahil - bugünlerde Java'da büyük uygulamalar yazdığını unutmayın. Modern bir Java VM'nin standart bir parçası olan Just-In-Time (JIT) derleyicisi göz önüne alındığında, performans gerçekten diğer üst düzey dillerle karşılaştırılabilir. Java, yıllardır yalnızca "yorumlanmış bir dil" olmamıştır.
keshlam

JIT derleyicileri bir JVM kavramına bağlı değildir. JIT derleyicilerini kullanmayan, ticari olanları bile, JVM'ler vardır. IBM'in JVM'sinin bazı varyasyonları varsayılan olarak JIT'yi etkinleştirmez, bunun yerine AOT derlemesini değiştirir. Ayrıca, küçük bir not, "Java önemli uygulamalar bu gün" (IBM 1997 yılından önce Java şeyler eklediğini) muhtemelen biraz daha apt on yıl ve önce bir buçuk oldu
Selali Adobor

Soru biraz yanıltıcıdır. Bir "yerel" iOS uygulaması Objective-C (veya Swift) ile yazılır ve derlenir, oysa "standart" bir Android uygulaması Java ile yazılır ve bytecode ile derlenir. @ DanHulme'nin cevabına bakınız. Ancak, her iki platform için de örneğin PhoneGap / Cordova kullanarak HTML ve JavaScript'te uygulamalar yazmak mümkündür. Bir HTML uygulamasının genellikle aynı platformdaki yerel uygulamalardan daha yavaş çalıştığı algılanır. Öyleyse "öteki" platform için benzer bir uygulama daha yavaş görünüyorsa, bunun nedeni farklı teknolojiyi kullanarak oluşturulmuş olmasıdır.
David

Yanıtlar:


85

Java Android'de yorumlanmadı. Android uygulamaları geliştirici tarafından bytecode için derlenir . Bytecode, programın küçük bir temsilidir: programcı tarafından yazılan kaynak kodundan daha küçük fakat yine de CPU tarafından doğrudan çalıştırılamaz. Ölü kod kaldırma gibi bazı optimizasyonlar bu aşamada yapılabilir.

Uygulamayı bir cihaza yüklediğinizde, Dalvik JVM, bayt kodunu tıpkı çalıştırmak üzere olduğu gibi, yerel çalıştırılabilir kodda derler. Bu tam zamanında bir derleme. Program derlenmeyi beklerken kısa bir yavaşlamaya neden olur, ancak daha sonra genel performans kodu yoktur, çünkü kod yerel çalıştırılabilir kod için derlenmiştir.

Geliştiricinin bilgisayarında ön derleme yapmak yerine, bu şekilde yapmanın bazı performans avantajları vardır. Uygulama, donanım özelliklerinden yararlanarak ve performans özelliklerini kullanarak telefondaki belirli bir CPU için derlenebilir. Örneğin, eğer CPU destekliyorsa, donanım kayan nokta işlemlerini kullanabilir. Ek olarak, akıllı bir JIT derleyicisi (kuşkusuz Dalvik bu kadar akıllı değildir) programın çalışma şeklini izleyebilir ve programın gerçek kullanımda kullanılmasına bağlı olarak optimizasyonlar yapabilir. Ortamınızda, telefonunuzda hangi seçeneklerin açıldığını ve kapatıldığını gördükten sonra kodu daha iyi dal ipuçlarıyla derleyebilir. Bir ön derleyici kullanmak için bu bilgilere sahip değil.

Dalvik , JITT derlemesinin sakıncalarını azaltmak için Dalvik önbelleğini ve diğer teknikleri kullanır . Android L ve daha sonra, ART için yeni JVM, bir tamamen JIT değiştirir öncesinde-of-time derleyici. Bu, uygulama yüklendiğinde JIT'in avantajlarından en iyi şekilde yararlanmak için, uygulama yüklendiğinde byte kodunu yerel yürütülebilir kodla derler.

Android uygulamalarının tamamen Java'dan oluşmadığını unutmayın. Geliştiriciler , özellikle oyunlar için uygulamanın kritik performans gösterdiği kısımları için, uygulamalarının tümünü veya bir kısmını C veya C ++ dilinde yazacak NDK'ye sahiptir. OpenGL ve Renderscript gibi özel amaçlı arayüzler, programcıların bazı hesaplama türleri için GPU ve SIMD işlemcisi gibi özel donanımdan yararlanmalarını sağlar.

Yani gerçekten, sorunuza basit bir cevap yok. Ön derleme yerine JIT kullanmak bazı şeyleri daha hızlı, bazılarını daha yavaş yapar. İşletim sisteminin genel performansının sadece bir kısmı.


1
Mükemmel açıklama için +1. Aslında böyle bir cevap bekliyordum.
MANI

5
Gerçekten de eski ".NET / Java vs. C ++ performans" tartışmalarından çok da farklı değil. Elmalar ve portakallar.
Aaron,

1
@ ArmonSafai Oldukça öyleydi.
Dan Hulme

2
@MTilsted: budur tür gerçek, ama bu yüzden yaklaşık olasılıkla sadece bir uygulamayı çalıştırmak ilk defa olacağını bahsettiğin hemen her şeyi, önbelleğe alır.
Aaron,

1
Buradaki asıl sorun Dalvik’in “normal” bir JVM olması. HotSpot'a dayanan yığının aksine, kayıt tabanlı olmak (ARMS işlemcilerinin (örneğin IA32 gibi) hedeflemiş olduğu ARM işlemcilerinin doğası nedeniyle), Zygote kullanımı ve odex dosyaları (yani bütün fikri) [daha fazla veya daha az] doğrudan sınıf dosyasından sınıf yükleyicisine gitmiyorsa), Dalvik'i normal bir JVM olarak ele almak, bazı kavram yanılgılarına yol açmak zorundadır. Özellikle HotSpot uygulamasının detaylarının birçoğu genel olarak yanlışlıkla JVM'lerle ilişkilendirildiğinden (JIT derleyicisi gibi).
Selali Adobor

2

Bu geniş bir soru olduğu için işte geniş bir cevap.

"Android uygulamaları yorumlandığından iOS uygulamaları android uygulamalarından daha hızlı mı?"

İlk önce iOS uygulamaları android uygulamalarından "daha hızlı" değildir.

İkincisi, konuyla ilgili "Android uygulamaları Yorumlanır." Bu, "15 yıl önce" gibi, bilgisayar hakkında söyleyeceğiniz bir şey: yukarıdaki tartışmadan da anlaşılacağı gibi, durum bugün çok daha karmaşıktır; tamamen yeni teknolojiler öne çıkmıştır. “Derlenmiş” yorumundan daha hızlı! 20 yıl önce makine koduyla karşılaştırıldığının farkındaydı; İşler o kadar ilerledi ki, sorun bugün "iOS V Android" e gerçekten net bir şekilde uygulanamıyor.

Üçüncüsü, mobil programlamada bu tür düşünceleri tamamen bataklıktan başka konular da var. Yere sadece bir örnek, mobil programcılar, büyük kayan görüntü listelerini, tembel yükleme ve benzeri sorunları işlemek için kendilerini knock out. İki işletim sisteminin ve çeşitli popüler kütüphanelerin, bu kritik meseleleri nasıl ele aldıkları, genellikle başka meseleleri ele geçiriyor.

Dördüncüsü, cep telefonlarındaki sadece bir tane daha zorlayıcı konu, grafik yonga setinin sorunları ve bunun yazılımla, OpenGL vb. Örneğin, Apple bu problemlerle ilgili olarak “Metal” i çağıran bir sistemle çıkıyor ve Android bu alanda kendi “şeyleriyle” çıkıyor. Grafik boru hattı etrafındaki bu sorunlar, uygulamaların elinizde nasıl "hissettiği" için çok önemlidir.

Sorunuza verilen kısa cevap, "derlenmiş V. tercüman" dır, temelde bildiğiniz güncel olmayan bir tartışma noktasıdır?

(Ayrıca, özellikle bir Not3'ü bir iPhone'dan daha "yavaş" bulmuyorum. Ayrıca, bunların bazıları saf eserdir - ucuz Android telefonlar vardır: düşük performanslı iPhone'lar bulunmadığından bazı insanlar yanlış olabilir. bundan fikirler.)


-3

Çünkü, yorumlanmış uygulamalar her zaman yavaş oldukları anlamına gelmez. Bazen derlenmiş olanlara göre daha güçlü ve dinamiktirler. Derlenen uygulamadaki tüm kodlar bir kez derlendiğinde ve çıktılar kitaplıklar veya çalıştırılabilir formlar şeklinde tutulduğundan, yorumlanmış bir dilde bir defa rastgele çalıştırma sırasını değiştirebilir. Böylece, geliştiriciye geliştiriciye ve programlama yoluna bağlı olduğunu söyleyebilirim.

Ancak, Java (Android programlama dili) yorumlanmamıştır, ancak JIT derlenir. Bu, Android programlarının çalıştırılmadan hemen önce derlenmesi ve iOS'nin Hedef C'sine oldukça benzer bir performans göstermesi anlamına geliyor.

Daha yakın bir zamanda, Android'in ART çerçevesi uygulamaları önceden derler, iOS uygulamaları ile aynı şekilde çalıştırılırlar. Başka bir deyişle, Android'in bir sonraki sürümü muhtemelen iOS kadar hızlı olacak.

Güncelleştirme

Programlama dilleri genellikle iki kategoriden birine girer: Derlenmiş veya Yorumlanmış. Derlenmiş bir dilde, girdiğiniz kod çalıştırılabilir bir dosya olarak kaydedilmeden önce makineye özgü talimatlara indirgenir. Yorumlanan dillerle, kod girdiğiniz biçimde kaydedilir. Derlenmiş programlar, genellikle yorumlanmış programlardan daha hızlı çalışır, çünkü yorumlanmış programların çalışma zamanında makine talimatlarına indirgenmesi gerekir. Ancak, yorumlanmış bir dille, derlenmiş bir dilde yapılamayan şeyler yapabilirsiniz. Örneğin, yorumlanmış programlar çalışma zamanında işlevler ekleyerek veya değiştirerek kendilerini değiştirebilir. Ayrıca, yorumlanmış bir ortamda uygulamalar geliştirmek genellikle daha kolaydır, çünkü küçük bir bölümü her test etmek istediğinizde uygulamanızı yeniden derlemeniz gerekmez.


1
"bir kez rastgele yürütme sırasını değiştirebilir mi demek istiyorsun? Ve nasıl daha güçlü ve dinamikler? Ayrıca yavaş olduklarını söylemiyorum, sadece biraz daha yavaş olduklarını bile.
Armon Safai

3
Bu tamamen doğru değil. Bir derleme yapmak zorunda olmamanın bir avantaj olduğunu söylemek yanıltıcıdır, çünkü bir APK dosyası oluşturmanız ve test cihazına dağıtmanız gerekir. Google, Java kullanmaya karar vermedi: Android, satın almadan önce zaten Java tabanlıydı. APK dosyaları, "[programcı] 'nın girdiği formatta" kodunu içermez.
Dan Hulme

1
Microsoft .NET, aynı şekilde java'nın bytecode'a dönüştürüldüğü gibi yorumlanan IL koduna da derlenmiştir.
Esben Skov Pedersen

12
Bu cevaptaki birçok bilgi gerçekten alakalı veya teknik olarak doğru değildir. Dürüstçe bu cevabın teknik doğruluk için tamamen gözden geçirilmesini öneririm.
Aza

2
Olağandışı bir JVM uygulamasıyla ilgilenmediğiniz sürece, Java genellikle yorumlanmış bir dil değildir . JIT derlemesi tercüman ile aynı şey değildir, bu nedenle bu cevabın çoğu JIT kullandığından Android'in performansı bağlamında oldukça ilgisizdir.
eldarerathis
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.