Dalvik je diskontinuirani[1] proces virtualne mašine (VM) koji se koristi u Gugl-ovom Android operativnom sistemu. On je integralni deo Adroidovog softverskog seta kojeg koristi Android 4.4 "KitKet" i njegovi prethodnici, ovo koriste mobilni telefoni, tableti, i sve češće, smart televizori i prenosni računari. Dalvik je softver otvorenog tipa kodiranja, original je napisao Dan Borstein, koji ga je nazvao po ribarskom selu Dalvik u Eyjafjörður na Islandu.[2][3]

Dalvik
Programer(i)Dan Bornstein
Repozitorijum Uredi na Vikipodacima
Operativni sistemJezgro Linuksa
PlatformaAndroid
TipVirtuelna mašina
LicencaApache licenca 2.0
Veb-sajtsource.android.com/devices/tech/dalvik/index.html
Dalvik izvršni modul
Ekstenzija fajla.dex

Programi za Android su najčešće napisani u Javi i prevedeni su u bajtkodove namenjene za Java virtuelnu mašinu, koji se kasnije prevodi na Dalvika bajtkod i skladišti u .dex (Dalvik EXecutable) i .odex (Optimized Dalvik EXecutable) fajlove; povezani termini odex i de-odex su povezani sa odgovarajućom bajtkod konverzijom. Kompaktni .dex format je namenjen sistemima koji su ograničeni memorijom i brzinom procesora.

Dalvikov sledbenik je Android Rantajm (ART), koji koristi iste bajtkodove i .dex fajlove (ali ne i .odex fajlove) kako bi se performanse vidljivo poboljšale u korist krajnjeg korisnika. Novi sistem izvršavanja se pojavio kod Android 4.4 "KitKet" verzije sistema,[4][5] a u sledećoj verziji Dalvik je u potpunosti zamenjen ART-om; Android 5.0 "Lizalica" je prva verzija operativnog sistema u kojoj jedino ART poseduje sistem izvršavanja.[6]

Arhitektura uredi

 
Poređenje Dalvik i ART arhitekture

Za rasliku od Java VM koje su u suštini mašine za raspoređivanje podataka, Dalvik VM koristi arhitekturu koja se bazira na registrima, zahteva manje ali komplikovanije mehaničke instrukcije. Dalvik je napisan u Javi koristeći Android aplikaciju za programiranje interfejsa (API), prevedena na Java bajtkod, i pretvorena na Dalvikove instrukcija ako je to potrebno. 

Alatka nazvana dx se koristi da Javine .class fajlove pretvari u .dex format. Više class fajlova može biti uvršteno u jedan .dex fajl. Duplirane niske i ostale konstante se koriste u više class fajlova upakovani u jedan .dex fajl kako bi se uštedelo na memoriji. Java bajtkod se takođe pretvara u alternativni skup instrukcija koje koristi Dalvik VM. Nekomprimovani .dex fajl je obično malo manji od komprimovane Java arhive (JAR) izvedeni iz istih .class fajlova.[7]

Izvršni fajlovi koji se instaliraju pomoću Dalvika se mogu modifikovati nakon instaliranja na mobilni uređaj. Kako bi se unapredila optimizacija, redosled bajtova se može izmeniti u podatak, strukura podataka i funkcionalna biblioteka mogu da se spoje, a prazni class objekti bi se na kratko prespojili, na primer.

Pošto jako malo memorije zahteva, Dalvik ima posebne karakteristike i razlikuje se od ostalih VM:[8]

  • VM sada zauzima manje memorije.
  • Tabela sa konstantnim vrednostima je modifikovana za 32-bitni sistem kako bi se pojednostavio interpretator
  • Standardni Java bajtkod izvršava naredbe veličine 8 bita. Lokalne promenljive se moraju kopirati iz operativnog skladišta pomoću posebnih naredbi. Umesto toga Dalvik koristi 16-bitni skup instrukcija koji radi direktno sa lokalnim promenljivama. Lokalne promenljive su najčešće upakovane u virtualne registre veličine 4-bita. To smanjuje njegovu količinu instrukcija i ubrzava brzinu interpretatora.

Prema Gugl-u, dizajn Dalvika dozvoljava uređaju da pokrene više primeraka VM efikasnosti. .[9]

Android 2.2 "Froyo" je proširio Dalvik sa JIT kompilacijom koja je bazirana na osnovu nacrta, koja optimizira sprovođenje aplikacija analizirajući aplikaciju svaki put kada se vrši dinamičko prevođenje kratkih segmenata njenog bajtkoda u mašinski kod. Dok Dalvik interpretira ostatak bajtkodova aplikacije, instrukcije izvučene iz kratkih segmenata bajkodova koji se zovu "nacrti", obezbeđuju značajna poboljšanja performansi.[10][11][12]

Performanse uredi

Ko zaslužuje pohvale, da li mašine za skladištenje podataka ili pristup regirtracije podataka,je debata koja traje već poprilično dugo.[13]

Generalno, mašine za skladištenje podataka mora da koristi instrukcije da očita podatak na stek i da manipuliše tim podatkom, i, samim tim, zahteva više instrukcija nego registar mašina za implementaciju koda visokog nivoa, ali su instrukcije u registar mašini moraju da kodiraju izvore i odredišta registara i, samim tim, imaju tendenciju da budu veći. Ova razlika je vrlo važna kad je u pitanju VM interpretacija za svaki opkod  i kojoj brzina slanja operativnog koda vredi mnogo, a to važi i za ostale slične i bitne faktore JIT kompilacije.

Kakogod, Oracle (vlasnik Java tehnologije) je 2010. godine testirao ARMv7 uređaj sa standarnom Javom bez grafike kao osnovnim merilom. Ugradbena Java SE je očigledno 2 do 3 uta brža od Androida 2.2, koji je inicijalno koristio JIT kompajler.[14]

Godine 2012. akadmski program za testiranje potvrdio faktor 3 razlike između Žarišta i Dalvika na istoj Android Platformi, isto tako nije bilo govora o tome da je Dalvikov kod manji od koda Žarišta.[15]

Nadalje, od marta 2014. godine, testiranja obavljena na Androidu pokazuju faktor 100 razlike između aplikacija na mašinskom jeziku i Dalvikovih aplikacija na istom Android uređaju[16] U toku testiranja koja su se kasnije odvijala JNI i mašinski kod su pokazali ogromno ubrzanje koristeći interpretator iz 2009. godine.[17]

Licence i patenti uredi

Dalvik je objavljen pod uslovima Apache licence 2.0.[18] Gugl kaže da je Dalvik primenio dizajn čiste sobe a ne proizvod koji je razvijen na Javinom izvršenju, što bi značilo da nije nasledio dozvolu za kopiranje podataka ni od jedne verzije Java izvršitelja.[19]Orakl i još neki kritičari osporavaju o ovome.[20]

12.08.2010. godine Orakl, koji je u aprilu 2009. dobio Sun Microsystems a s tim i prava na Javu, je tužio Gugle zbog navodnog kršenja zakona o patentima i autorskim pravima. Orakl navodi da je Gugl, dok je razvijao Android, svesno, direktno i konstantno krao Orakl-ovu intelektualnu svojinu vezanu za Javu.[21][22][23] Legalnu analizu ovog slučaja obavila je Pamela Džouns i na Groklaw-u je prokomentaisala kako se oseća neprijatno.[24] U maju 2012. godine porota je izglasala da Google nije kriv.[25][26] Stranke su se dogovorile da nece platiti troškove suđenja ako predaju 9 kopija koda.[27][28]

9.5.2014. godine je Federalni sud delom presudio u Oraklovu korist na temu autorskih prava, a ostatak problema je prenesen u okružni sud gde će biti raspravljen.[29][30]

Vidi još uredi

Reference uredi

  1. ^ „Debugging ART Garbage Collection”. Pristupljeno 6. 10. 2015. „The Dalvik runtime is no longer maintained or available [in latest versions of Android] and its byte-code format is now used by ART. 
  2. ^ Journal entry referencing the source of the name
  3. ^ „Google Calling: Inside Android, the gPhone SDK”. onlamp.com. Arhivirano iz originala 10. 01. 2017. g. Pristupljeno 5. 2. 2008. 
  4. ^ Buckley, Sean (6. 11. 2013). „'ART' experiment in Android KitKat improves battery life and speeds up apps”. Engadget. Pristupljeno 5. 7. 2014. 
  5. ^ Daniel P. (7. 11. 2013). „Experimental Google ART runtime in Android KitKat can bring twice faster app executions”. phonearena.com. Pristupljeno 5. 7. 2014. 
  6. ^ Linder, Brad (15. 10. 2014). „What's new in Android 5.0 Lollipop?”. liliputing.com. Pristupljeno 15. 10. 2014. 
  7. ^ Bornstein, Dan (29. 5. 2008). „Presentation of Dalvik VM Internals” (PDF). Google. str. 22. Arhivirano iz originala (PDF) 16. 04. 2017. g. Pristupljeno 16. 8. 2010. 
  8. ^ Rose, John (31. 5. 2008). „with Android and Dalvik at Google I/O”. Arhivirano iz originala 4. 6. 2008. g. Pristupljeno 8. 6. 2008. 
  9. ^ Google (13. 4. 2009). „What is Android?”. Pristupljeno 19. 4. 2009. 
  10. ^ Cheng, Ben; Buzbee, Bill (maj 2010). „A JIT Compiler for Android's Dalvik VM” (PDF). android-app-developer.co.uk. Google. str. 5—14. Arhivirano iz originala (PDF) 6. 11. 2015. g. Pristupljeno 18. 3. 2015. 
  11. ^ Nickinson, Phil (26. 5. 2010). „Google Android developer explains more about Dalvik and the JIT in Froyo”. androidcentral.com. Pristupljeno 8. 7. 2014. 
  12. ^ „Nexus One Is Running Android 2.2 Froyo. How Fast Is It Compared To 2.1? Oh, Only About 450% Faster”. 13. 5. 2010. Pristupljeno 21. 5. 2010. 
  13. ^ Shi, Yunhe; Gregg, David; Beatty, Andrew; Ertl, M. Anton (11. 6. 2005). „Virtual Machine Showdown: Stack Versus Registers” (PDF). Pristupljeno 22. 12. 2009. 
  14. ^ Vandette, Bob (22. 11. 2010). „Java SE Embedded Performance Versus Android 2.2”. Oracle Corporation. Arhivirano iz originala 28. 6. 2011. g. Pristupljeno 4. 9. 2011. „The results show that although Androids new JIT is an improvement over its interpreter only implementation, Android is still lagging behind the performance of our Hotspot enabled Java SE Embedded. As you can see from the above results, Java SE Embedded can execute Java bytecodes from 2 to 3 times faster than Android 2.2. 
  15. ^ Hyeong-Seok Oh; Beom-Jun Kim; Hyung-Kyu Choi; Soo-Mook Moon (2012). „Evaluation of Android Dalvik virtual machine”. Association for Computing Machinery. Pristupljeno 23. 3. 2014. „In the JITC mode, however, Dakvik is slower than HotSpot by more than 2.9 times and its generated code size is not smaller than HotSpot's due to its worse code quality and trace-chaining code. 
  16. ^ „Top AndEBench Scores”. www.eembc.org. Pristupljeno 23. 3. 2014. 
  17. ^ „Developing and Benchmarking Native Linux Applications on Android”. Lecture Notes of the Institute for Computer Sciences, Social Informatics and Telecommunications Engineering. Springer Publishing. 29. 4. 2009. Pristupljeno 23. 3. 2014. „The results show that native C applications can be up to 30 times as fast as an identical algorithm running in Dalvik VM. Java applications can become a speed-up of up to 10 times if utilizing JNI. 
  18. ^ „Downloading the Source Tree - Android Open Source”. Android.git.kernel.org. Arhivirano iz originala 17. 4. 2009. g. Pristupljeno 7. 6. 2012. 
  19. ^ Mazzocchi, Stefano (12. 11. 2007). „Dalvik: how Google routed around Sun’s IP-based licensing restrictions on Java ME”. Arhivirano iz originala 25. 2. 2011. g. Pristupljeno 16. 8. 2010. 
  20. ^ Bott, Ed (8. 9. 2011). „The real history of Java and Android, as told by Google”. ZDNet. Pristupljeno 27. 11. 2011. „'The definition of a “clean room” implementation is that the engineers writing the code have no direct exposure to the original, copyrighted material, including code, specifications, and other documentation. That’s a problem for Google, as I noted in yesterday’s post, because there is substantial evidence that the engineers working on the project had direct access to the copyrighted material. ' 
  21. ^ „Oracle Sues Google Over Java in Android Devices”. digitaltrends.com. 13. 8. 2010. Pristupljeno 8. 8. 2011. 
  22. ^ Niccolai, James (12. 8. 2010). „Oracle sues Google over Java use in Android”. Computerworld. Pristupljeno 13. 8. 2010. 
  23. ^ Hachman, Mark (13. 8. 2010). „Oracle Sues Google Over Android Java Use”. PC Magazine. Ziff Davis. 
  24. ^ Jones, Pamela (16. 8. 2010). „Oracle America's complaint against Google, as text”. Groklaw. 
  25. ^ Lowensohn, Josh (23. 5. 2012). „Jury clears Google of infringing on Oracle's patents”. ZDNet. Pristupljeno 25. 5. 2012. 
  26. ^ Mullin, Joe (31. 5. 2012). „Google wins crucial API ruling, Oracle’s case decimated”. Ars Technica. Pristupljeno 1. 6. 2012. 
  27. ^ Niccolai, James (20. 6. 2012). „Oracle agrees to 'zero' damages in Google lawsuit, eyes appeal”. Arhivirano iz originala 01. 04. 2023. g. Pristupljeno 23. 6. 2012. 
  28. ^ Outler, Adam (16. 5. 2012). „Update on the Oracle Versus Google Trial”. Arhivirano iz originala 12. 04. 2013. g. Pristupljeno 18. 1. 2013. „'A major portion of the Oracle’s claims are based on 9 lines of code contained within Java.Util.Arrays.rangeCheck(). Here is the code in question:...' 
  29. ^ Rosenblatt, Seth (9. 5. 2014). „Court sides with Oracle over Android in Java patent appeal”. CNET. Pristupljeno 10. 5. 2014. 
  30. ^ „ORACLE AMERICA, INC. , Plaintiff - Appellant, v. GOOGLE INC., Defendant - Cross - Appellant.” (PDF). Court of Appeals for the Federal Circuit. 9. 5. 2014. Arhivirano iz originala (PDF) 1. 6. 2014. g. Pristupljeno 10. 5. 2014. 

Spoljašnje veze uredi