Android uygulamaları temelde sanal bir işlemci olan bir JVM (Dalvik VM) üzerinde çalıştığından ve her sanal yöntemin temel yonga setinin yerel talimatıyla eşlenmesi gerektiğinden, bu eşleme, bu eşlemenin ek yükü nedeniyle daha fazla güç tüketimine neden oluyor mu?
Bu soru Java'ya genişletilebilir ve "Java uygulamaları daha fazla güç kullanıyor mu?" Android telefonların diğer platformlara / telefonlara kıyasla bu kadar korkunç pil ömrüne sahip olmasının nedeni bu mu?
Edit : Cevaplara dayanarak ben yanlışlıkla JVM ve Dalvik birbirinin yerine konuşmuştu çünkü birkaç noktaya açıkladım. Bu bitte Java'dan sadece daha fazla güç kullanıp kullanmadığını ve evet ise, bu kavramsal olarak Android için de geçerli olup olmadığını ve pil ömrünün azalmasına neden olduğunu sormak için konuşuyorum.
Bağlam : Wikipedia'dan alıntılanmıştır:
- Java bayt kodu, C kodu için montaj diline benzer.
- Bir derleyicinin bakış açısından, Java sanal makinesi, kod oluşturulabilen bir komut kümesi olan Java bayt koduna sahip başka bir işlemcidir.
- JVM bir yığın mimarisine sahiptir. Dalvik, JVM ile aynı sanallaştırma türü olmayan ve kayıt mimarisine sahip bir işlem sanal makinesidir.
Java programlama dili bytecode (derleme benzeri) olarak derlendiğinden ve sanal bir işlemci üzerinde çalıştığından, gerçek yazılım kodu taşınabilirliği sağlar. Ayrıca, Linux için bir JVM olduğu ve Linux açık donanıma taşındığı için, kombinasyon tüm yığın boyunca gerçek uygulama taşınabilirliği sağlayabilir.
Güç : Soru esasen buna dayanır - yazılım kodunuzun veya uygulamanızın aynı işlevselliği için, CPU saat döngülerinizin yüzde kaçının çalışma süresi ortamına atfedildiği. Bu, modern JVM'lerin Just-In-Time derleme ortamıdır, burada bytecode temel yonga setinin yerel talimatına derlenmişse, çalışma süresi sadece jit derlemesi sırasında aktif olmalıdır. Böylece, güç tüketimi yükü ile sonuçlanması beklenen çalışma zamanı ortamına sahip olmak için ne kadar daha fazla CPU saat çevrimi kullanılır. Statik olarak yazılmış ve oluşturulmuş dillerle karşılaştırıldığında göreceli performansla değil, yalnızca güç tüketimi yönüyle ilgileniyorum ve Java'nın avantajlarını anlıyorum. İlişkili olabilecek alt sorular:
- Java Çalışma zamanı libc'yi işlevselliği için kullanıyor mu?
- Güç tüketimiyle ilgili bu noktalardan herhangi biri Dalvik VM ve Android'e mi çevriliyor?
- Ekran ve kablosuz yonga setleri hakkında konuşmadan Android'in zayıf pil tüketimini genelleştirmek yerine - iPhone 5'in modern Nexus telefonlara kıyasla küçük olan 1440 mAH'lık bir pile sahip olduğundan bahsedelim. Tüm bu düşünce treni (Java, Sanal işlemci, talimat haritalama, Android) ortaya çıktı çünkü bir iphone-sadık arkadaşı, bunun iphone'unun (müthiş) bağlantımdan daha iyi pil ömrüne sahip olmasının olası nedeni olabileceğini iddia etti.
Her durumda, aşağıdaki cevaplar için teşekkürler.