Dalvik (software) - Dalvik (software)
| Autori originali | Dan Bornstein |
|---|---|
| Repertoriu | |
| Sistem de operare | Kernel Linux |
| Platformă | Android |
| Succesor | Runtime Android |
| Tip | Mașină virtuală |
| Licență | Licență Apache 2.0 |
| Site-ul web | sursa |
Dalvik este o mașină virtuală de proces (VM) întreruptă în sistemul de operare Android care execută aplicații scrise pentru Android. (Formatul bytecode Dalvik este încă utilizat ca format de distribuție, dar nu mai este în timpul rulării în versiunile Android mai noi.) Dalvik a fost o parte integrantă a stivei de software Android din versiunile Android (acum neacceptate) 4.4 „KitKat” și mai vechi, care erau utilizat în mod obișnuit pe dispozitive mobile, cum ar fi telefoanele mobile și computerele tabletă , și mai mult pe unele dispozitive, cum ar fi televizoarele inteligente și dispozitivele portabile . Dalvik este un software open source , scris inițial de Dan Bornstein, care l-a numit după satul de pescari Dalvík din Eyjafjörður , Islanda .
Programele pentru Android sunt scrise în mod obișnuit în Java și compilate în bytecode pentru mașina virtuală Java , care este apoi tradusă în bytecode Dalvik și stocată în fișiere.dex ( Dalvik EXecutable ) și .odex( Optimized Dalvik EXecutable ); termenii înrudiți odex și de-odex sunt asociați cu conversiile respective de bytecode. Formatul compact Dalvik Executable este conceput pentru sisteme care sunt constrânse în ceea ce privește memoria și viteza procesorului .
Succesorul Dalvik este Android Runtime (ART), care folosește aceleași fișiere bytecode și .dex (dar nu fișierele .odex), succesiunea vizând îmbunătățiri ale performanței transparente pentru utilizatorii finali . Noul mediu de rulare a fost inclus pentru prima dată în Android 4.4 „KitKat” ca o previzualizare a tehnologiei și a înlocuit Dalvik în întregime în versiunile ulterioare; Android 5.0 „Lollipop” este prima versiune în care ART este singurul runtime inclus.
Arhitectură
Spre deosebire de mașinile virtuale Java , care sunt mașini stivuitoare, Dalvik VM folosește o arhitectură bazată pe registre care necesită mai puține instrucțiuni de mașină virtuală, de obicei mai complexe. Programele Dalvik sunt scrise în Java folosind interfața de programare a aplicației Android (API), compilate în cod bytec Java și convertite în instrucțiuni Dalvik, după caz.
Un instrument numit dxeste utilizat pentru a converti fișiere Java .class în format .dex. Mai multe clase sunt incluse într-un singur fișier .dex. Șirurile duplicate și alte constante utilizate în fișiere cu mai multe clase sunt incluse o singură dată în ieșirea .dex pentru a economisi spațiu. Codul secundar Java este, de asemenea, convertit într-un set de instrucțiuni alternativ utilizat de Dalvik VM. Un fișier .dex necomprimat are, de obicei, o dimensiune cu câteva procente mai mică decât o arhivă Java comprimată (JAR) derivată din aceleași fișiere .class.
Executabilele Dalvik pot fi modificate din nou când sunt instalate pe un dispozitiv mobil. Pentru a obține optimizări suplimentare , ordinea de octeți poate fi schimbată în anumite date, structurile de date simple și bibliotecile de funcții pot fi legate în linie și obiectele de clasă goale pot fi scurtcircuitate, de exemplu.
Fiind optimizat pentru cerințe de memorie reduse, Dalvik are câteva caracteristici specifice care îl diferențiază de alte VM-uri standard:
- VM a fost redusă pentru a utiliza mai puțin spațiu.
- Piscina constantă a fost modificată pentru a utiliza numai pe 32 de biți indicii pentru a simplifica interpretul .
- Bytecode - ul Java standard execută instrucțiuni de stivă pe 8 biți . Variabilele locale trebuie să fie copiate în sau din stiva de operanzi prin instrucțiuni separate. Dalvik folosește în schimb propriul set de instrucțiuni pe 16 biți care funcționează direct pe variabile locale. Variabila locală este de obicei aleasă de un câmp de 4 biți „registru virtual”. Acest lucru reduce numărul de instrucțiuni al lui Dalvik și crește viteza de interpret.
Conform Google, designul Dalvik permite unui dispozitiv să ruleze eficient mai multe instanțe ale VM.
Android 2.2 „Froyo” a adus în Dalvik compilarea „ just-in-time” (JIT) bazată pe urmări , optimizând execuția aplicațiilor prin profilarea continuă a aplicațiilor de fiecare dată când rulează și compilarea dinamică a unor segmente scurte executate frecvent din codul lor de bytec în codul mașinii native . În timp ce Dalvik interpretează restul codului de bytec al aplicației, executarea nativă a acelor segmente de bytecode scurte, numite „urme”, oferă îmbunătățiri semnificative ale performanței.
Performanţă
Meritele relative ale mașinilor de stivă versus abordările bazate pe registre sunt un subiect de dezbatere continuă.
În general, mașinile bazate pe stivă trebuie să utilizeze instrucțiuni pentru a încărca date pe stivă și pentru a manipula aceste date și, prin urmare, necesită mai multe instrucțiuni decât mașinile de înregistrare pentru a implementa același cod la nivel înalt , dar instrucțiunile dintr-o mașină de înregistrare trebuie să codeze sursa și registre de destinație și, prin urmare, tind să fie mai mari. Această diferență este importantă pentru interpreții VM, pentru care expedierea opcode-ului tinde să fie costisitoare, alături de alți factori relevanți în mod similar compilației just-in-time .
Testele efectuate pe dispozitivele ARMv7 în 2010 de Oracle (proprietarul tehnologiei Java) cu standarde Java non-grafice au arătat că HotSpot VM din Java SE încorporat este de 2-3 ori mai rapid decât Dalvik VM bazat pe JIT din Android 2.2 ( lansarea inițială Android care a inclus un compilator JIT). În 2012, criteriile academice au confirmat factorul 3 între HotSpot și Dalvik pe aceeași placă Android, menționând, de asemenea, că codul Dalvik nu era mai mic decât Hotspot.
Mai mult, începând din martie 2014, valorile de referință efectuate pe un dispozitiv Android încă arată până la un factor 100 între aplicațiile native și o aplicație Dalvik pe același dispozitiv Android. La executarea parametrilor de referință folosind interpretul timpuriu din 2009, atât Java Native Interface (JNI), cât și codul nativ au arătat o ordine de mărire a vitezei.
Licențierea și brevetele
Dalvik este publicat în condițiile licenței Apache 2.0. Unii spun că Dalvik este mai degrabă o implementare pentru cameră curată decât o dezvoltare în plus față de un runtime standard Java, ceea ce ar însemna că nu moștenește restricțiile de licență bazate pe drepturile de autor, fie din ediția standard, fie din ediția deschisă, runtime Java. Oracle și unii recenzori contestă acest lucru.
La 12 august 2010, Oracle , care a achiziționat Sun Microsystems în aprilie 2009 și, prin urmare, deține drepturile asupra Java, a dat în judecată Google pentru pretinsa încălcare a drepturilor de autor și a brevetelor. Oracle a susținut că Google, în dezvoltarea Android, a încălcat în mod deliberat, în mod repetat și în mod repetat, proprietatea intelectuală Oracle legată de Java. În mai 2012, juriul din acest caz a constatat că Google nu a încălcat brevetele Oracle, iar judecătorul de judecată a decis că structura API-urilor Java utilizate de Google nu era protejată prin drepturi de autor. Părțile au fost de acord cu zero dolari în daune legale pentru 9 rânduri de cod copiat.
Vezi si
- Runtime Android
- Dezvoltare software Android
- Virtualizarea aplicației
- Compararea mașinilor virtuale de aplicații
- Comparație între Java și Android API
- Decompilator JEB - un decompilator Dalvik (DEX și APK)
- Mașina virtuală Dalvik Turbo - o implementare Dalvik alternativă proprietară
Referințe
linkuri externe
- Dalvik bytecode - documentație oficială Android a setului de instrucțiuni
- Formatul Dex Executable - documentație oficială Android
- Un compilator JIT pentru Dalvik VM Android pe YouTube , Google I / O 2010, de Ben Cheng și Bill Buzbee
- Dalvik VM Internals , Google I / O 2008, de Dan Bornstein
- Întrebarea de 800 de milioane de dolari: Care este diferența dintre marcă și drept de autor?