# Dalvik (yazılım)
Dalvik yazılımı Google tarafından geliştirilmiş, Android için yazılmış uygulamaları yürüten ve şu an durdurulan sanal makine (VM) 'dir. Dalvik, Android 4.4 "KitKat" ve önceki Android sürümlerinin yazılım yığınının ayrılmaz bir parçasıdır; tipik olarak cep telefonları ve tablet bilgisayarlar gibi mobil cihazlarda ve daha yakınlarda Smart TV'ler ve giyilebilir bilgisayar gibi cihazlarda kullanılırdı. Dalvik, açık kaynaklı yazılım, Dan Bornstein tarafından yazılmıştır ve ismini Eyjafjörður, İzlanda da yerleşen Dalvik balıkçı köyünden almıştır. Android için programlar yaygın olarak Java ile yazılmış ve Java sanal makinesi için baytkodu derlemiştir. Daha sonra Dalvik bytecodeye çevrilmiş ve ".dex" (Yürütülebilir Dalvik Dosyası) ve ".odex" (Optimize Edilmiş Yürütülebilir Dalvik Dosyası) dosyalarında saklanır. Kompakt Dalvik yürütülebilir biçimi sistemleri için tasarlanmış, bellek ve işlemci hızı açısından sınırlandırılmıştır.
Dalvik'in halefi, Android Runtime (ART) 'dir; aynı bayt kodu ve .dex dosyaları kullanır (ancak .odex dosyası olmayan), son kullanıcılara şeffaf performans iyileştirmeleri hedefler. Yeni çalıştırma ortamı, bir teknoloji önizlemesi olarak Android KitKat sürümünde ilk kez yer aldı ve tamamen sonraki sürümlerinde Dalvik yerine geldi; Android 5.0 "Lollipop"-tan başlayan sürümler sadece ART ile çalışıyorlar.


## Mimari.
İstif makineleri Java'nın aksine Dalvik VM, genellikle daha karmaşık, sanal makine talimatları, daha az gerektiren bir kayıt tabanlı mimari kullanır. Dalvik programları, Android uygulama programlama arabirimi (API) kullanarak Java dilinde yazılmış, Java bytecode derlenmiş ve gerektiği gibi Dalvik talimatlara dönüştürülür. dx denilen bir araç .dex biçime Java .class dosyalarını dönüştürmek için kullanılır. Çoklu sınıflar tek bir .dex dosyasında bulunur. Yinelenen dizeleri ve çoklu sınıf dosyalarında kullanılan diğer sabitler sadece bir kez .dex-de dahildir. Java bytecode da Dalvik VM tarafından kullanılan alternatif bir komut kümesine dönüştürülür.
Sıkıştırılmamış .dex dosyası, genellikle boyut olarak aynı sınıf dosyalarından türetilmiş sıkıştırılmış bir Java arşivinden (JAR) birkaç yüzde küçüktür. Bir mobil cihaz üzerine monte edildiğinde Dalvik yürütülebilir tekrar modifiye edilebilir. Daha fazla optimizasyonları kazanmak için bayt sırası, bazı verilerde takas edilebilir, veri yapıları ve fonksiyon kütüphaneleri basit çevrimiçi bağlantılı olabilir ve boş sınıf nesneleri kısa devre olabilir.
Düşük bellek gereksinimleri için optimize edilen Dalvik'in bazı özel özellikleri vardır:
  - VM az alanı kullanmak için aşağı zayıflama oldu.
  - "Sabit havuz" yalnızca 32 bit endeksleri kullanmak için yorumlayıcını basitleştirmek için modifiye edilmiştir.
  - Standart Java bytecode 8-bit yığın talimatları gerçekleştirir. Yerel değişkenlerin ayrı talimatlardan işlenen yığınından kopyalanması gerekir. Dalvik yerel değişkenler üzerinde doğrudan çalışır, kendi 16-bit komut setini kullanır. Yerel değişken yaygın 4-bit "sanal register" alanı tarafından seçilir. Bu, Dalvik talimat sayısını düşürür ve tercüman hızını yükseltir.
Google'a göre, Dalvik tasarımı verimli VM-den birden çok örneğini çalıştırmak için bir cihaz izin verir. Android 2.2 "Froyo", Dalvik içine iz tabanlı just-in-time (JIT) derleme getirdi, sürekli uygulamaları her zaman profilleme ile uygulamaların yürütülmesine optimize edir. Dalvik uygulamanın baytkodunu geri kalanını, "ipucu" olarak adlandırılan bu kısa baytkod segmentlerinin yerli yürütme, yorumlayıcı ederken, önemli performans geliştirmeleri sağlar.


## Performans.
Kayıt-tabanlı yaklaşımlara karşı yığın makinelerin göreli yararları devam eden tartışma konusudur. Genellikle yığın tabanlı makineler yığın üzerinde veri yüklemek ve bu verileri işlemek için talimatları kullanmaları gerekir ve böylece aynı yüksek seviyede kodu uygulamak için kayıt makineleri daha fazla talimat gerektirir, ama bir kayıt makinesinde talimatların kaynak ve hedef kayıtlarının kodlamak gerekir ve bu nedenle, daha büyük olma eğilimindedir. Testler Oracle (Java teknolojisinin sahibi) tarafından 2010 yılında ARMv7 cihazlarda yapıldı. Standart olmayan grafik Java kriterler ile Android 2.2 JIT tabanlı Dalvik VM-e göre (JIT derleyicisi içeren ilk Android sürümü) Java SE HotSpot VM 2-3 kat daha hızlı gömülü gösterdi. 2012 yılında, akademik kriterler aynı Android cihazında HotSpot ve Dalvik arasında 3 faktör doğruladı, ayrıca Dalvík kodunun HotSpot-dan daha küçük olmayan olduğuna dikkat çekti. Ayrıca, Mart 2014 itibarıyla, hala bir Android cihaz üzerinde gerçekleştirilen kriterler 100 yerli uygulamalar ve Dalvik uygulaması arasında bir faktör gösterir.


## Lisanslama ve patentler.
Dalvik Apache Lisansı 2.0 şartları altında yayınlandı. Google standart Java çalışma zamanı üstünde bir gelişmenin yerine Dalvikin bir temiz oda uygulaması olduğunu söylüyor. Oracle ve bazı yorumcular buna itiraz etdiler. 2009 yılı Nisan ayında Oracle Sun Microsystemsi satın aldı ve Oracle bu nedenle Java haklarına sahiptir. 12 Ağustos 2010 tarihinde, telif hakları ve patent iddia ihlali üzerine Google'ye dava açtı. Oracle, Googleni, Android'i gelişmekte, bilerek, doğrudan ve sürekli olarak Oracle'ın Java ile ilgili fikrî mülkiyetini ihlal ettiğini iddia etti. Mayıs 2012'de, bu durumda jüri Googlenin Oracle'ın patentleri ihlal etmediğini buldu ve duruşma hakimi Google tarafından kullanılan Java API'lerin yapısının telif olmadığına karar verdi. Taraflar kopyalanan kodun 9 hatları için yasal tazminat sıfır dolara anlaştılar. 9 Mayıs 2014 tarihinde, Federal Devre ABD Mahkemesi kısmen bölge kararı bozmuştur, Oracle lehine iktidar etti ve ve bölge mahkemesine geri adil kullanım sorununu geri gönderdi.