Java’da ve Android’de Bulunan Sanal Makieneler

Mullaass
2 min readFeb 22, 2023

--

Arkadaşlar öncelikle hepinize selamlar…Bugün ki konumuz Sanal makineler nelerdir ve Hangi dillerde bulunur.

Sanal makineler .Net ve Java gibi platformlarda bulunan bir yazılımsal olgudur. Dilleri sınıflandırmak için çalışma yapılarını parametre alırsak 2 sınıfı ayırmamız doğru olabilir. Sanal Makine ile çalışan programlama dilleri ve Direkt olarak işletim sistemi ve cihazın donanımsal özellikleri üzerinde çalışan programlama dilleridir.

C,Fortran ve Pascal gibi diller bir sanal makinaya ihtiyaç duymadan cihazın işletim sistemi üzerinde çalışabilen programlama dilleri iken ; C# ve Java gibi Programlama dilleri kendi sanal makineleri üzerinde çalışmaktadır.

Öncelikle şunu bilmemiz gerek C dili gibi (donanımsal olarak) low level olan bir dil bile Compiler’i olmadan direkt olarak Mikroişlemci veya Mikrodenetleyici tarafından anlaşılmaz.Mikroişlemciler sadece kendi makine komutlarını görüp algılayabilirler.

Artık diller arasında ki ayrımı ve sanal makinanın ne olduğunu kafamızda ne olduğunu oturttuysak yavaş yavaş Andrid’de bulunan Sanal Makinelere geçebiliriz.Ayrıca unutmadan Sanal Makine ve Sanal cihaz olan Emülatör birbirinden farklı kavramlardır.Bu ikisi arasında ki farkı unutmayalım.

Android’de bulunan Sanal Makinelere geçmeden önce Android üzerinden biraz bilgi paylaşmak istiyorum.Android temel olarak bir Linux dağıtımıdır.2005 yılında Google tarafından satın alınıp Açık kaynak Kodlu olarak geliştirilmeye devam edilmiştir.2007 yılı itibariyle Google’ın öncülük ettiği OHA (Open Handset Aliance) isimli organizasyon üyeleri tarafından geliştirilmeye devam edilmiştir. Açık kaynak kodlu olarak geliştirilmeye devam edilmesini rağmen bir GNU lisansına tanımlı değildir.

Android’de yazılan uygulamalar Native veya Hybrid olarak 2'ye ayrılır. Native diller sanal makine üzerinde çalışan dillerdir.Sistemin doğal diliyle yazılan dillerdir.

Android’de Dalvik(DVM) ve ART olmak üzere 2 adet sanal makineye sahiptir. Android 4.4 sürümüne kadar DVM tamamen kullanılırken 4.4 sürümünden sonra ART (Another Runtime) adlı sanal makinede kullanılmaya başlanmıştır. Ancak ART 5.0 sürümüne kadar deneme modunda kullanıldı KitKat sürümüyle tam olarak eklendi.

Peki android uygulama yazarken zaten native dil olarak java veya kotlin dillerinden yararlanmıyor muyuz ? O zaman neden Java’nın kendine ait sanal makinası olan JVM yerine kendimiz farklı sanal makineler ürettik ? Soru her ne kadar mantıklı olsada JVM maalesef ki görece düşük kapasiteli cihazlar için pek uygun değildir.Bunun birden fazla sebebi vardır ancak bugün ki konumuzu fazla dağıtmamak için bu konuyu daha fazla detaylandırmıyorum. Kısaca JVM gibi genel tabanlı bir java sanal makinası kullanmaktansa ; Android için özel olarak geliştirilen DVM ve ART adlı 2 sanal makinayı kullanmaktayız.Peki bu DVM ve ART arasında ki farklar nelerdir ?

DVM JIT derleyicisi, çağırılmayan fonksiyonu derlememektedir.Aslında bu bellek kullanımı açısından oldukça doğru bir yapıdır. Ancak bununla beraber JIT derleyicisi arka planda sürekli iş yaptığı için bu bizim cihazlarımızda performans olarak düşüşe yol açmaktadır. Tamda bu sebepten ötürü ART sanal makinasına ihtiyaç duyduk. Peki ART tam olark DVM’in yerini doldurabildi mi ?

Bu sorunun cevabı hem evet hemde hayır. ART DVM gibi performanssal sorunlarını çözmek amaçlı AOT(Ahead Of Time) adlı bir teknik geliştirdi. Bu teknik sayesinde performans anlamında yaşanılan düşüş engellendi ancak bu seferde bellek açısından alınan sonuçlar pek olumlu olmadı.Ancak günümüzde geliştirilen cihazların üst düzey olması sebebiyle bu bellek sorunu halledilmiş olmaktadır.

Konumuzun sonuna geldik.Eksik yada yanlış gördüğünüz yerler için lütfen yorumlarınızı eksik etmeyin.Şimdiden teşekkür ederim.

--

--