Dalvik (software)
Dalvik je v informatice název virtuálního stroje od firmy Google, který v systému Android vytváří běhové prostředí pro aplikace napsané v programovacím jazyce Java. V systému Android 4.4 „KitKat“ byl v roce 2013 uveden jako ukázka nástupce Dalviku Android Runtime (ART) a ve verzi Android 5.0 „Lollipop“ v roce 2014 již ART úplně nahradil původní virtuální stroj Dalvik.

Programy pro Android jsou převážně psané v programovacím jazyce Java. Jsou kompilovány do bajtkódu pro Java Virtual Machine. Ten je posléze přeložen do bajtkódu Dalviku a uložen v souborech .dex (Dalvik EXecutable) a .odex (Optimized Dalvik EXecutable). Pojmy odex a de-odex se používají ve spojení s konverzí bajtkódu. Kompaktní formát Dalvik Executable je navržen pro systémy, které jsou omezeny paměťovou nebo výkonovou kapacitou.

Architektura 
Java Virtual Machines jsou zásobníkové počítače, naproti tomu Dalvik Virtual Machines používají architekturu založenou na registrech. Ta vyžaduje méně složitých instrukcí virtuálního stroje. Programy pro Dalvik jsou napsané v Javě s využitím Android API. Napsané aplikace jsou dále zkompilovány do bajtkódu Javy a podle potřeby převedeny na instrukce Dalviku.

Nástroj zvaný dx se používá k převodu souborů .class Javy do formátu .dex. Větší množství tříd je zahrnuto v jediném souboru .dex. Duplicitní řetězce a konstanty používané ve více třídách jsou ve výstupním souboru .dex obsaženy pouze jednou (pro úsporu místa). Bajtkód Javy je pak převeden do instrukční sady používané Dalvik Virtual Machines. Nekomprimované soubory .dex jsou typicky o pár procent menší než komprimované soubory .jar (Java ARchive) (při použití stejných souborů .class).

Spustitelné soubory Dalvik (Dalvik Executable) mohou být při instalaci do mobilního zařízení znovu upravené a to s cílem dalších optimalizací.

Výkon 
Přínosy zásobníkových počítačů oproti registrovým počítačům jsou předmětem pokračující debaty.

Zásobníkové počítače obecně musejí použít instrukce k načtení dat do zásobníku a s těmi daty dále manipulují. Při implementaci vysokoúrovňového kódu to vyžaduje více instrukcí oproti použití registrových počítačů. Instrukce v registrových strojích bývají ovšem delší, protože musí kódovat zdrojové a cílové registry. Tento rozdíl je nejvíce důležitý kvůli interpretům Virtual Machines, pro které je vystavení operačního kódu velice drahou záležitostí. Podobně tomu je i u jiných faktorů, jako je just-in-time kompilace.

Testy provedené na zařízeních ARM v roce 2010 firmou Oracle (majitelem technologií Java) ukazují, že Java SE embedded (při použití standardních bezgrafických benchmarků) je dvakrát až třikrát rychlejší než Android 2.2 (v něm byl poprvé použit kompilátor JIT).

V roce 2012, bylo akademicky prokázáno, že Dalvik je téměř 3× pomalejší než HotSpot, mimo jiné se ukázalo, že kód generovaný Dalvikem byl delší než kód generovaný HotSpotem.

Kromě toho testy provedené na stejných Androidích zařízeních (březen 2014) ukazují, že nativní aplikace v C mohou být až 30× rychlejší než aplikace spuštěné na Dalvik Virtual Machines. Aplikace spuštěné interpretem z roku 2009 vykazují při použití jak Java Native Interface, tak nativního kódu zvýšení rychlosti.

Licence a patenty 
Dalvik je zveřejněn pod licencí Apache Licence 2.0. Podle Googlu je Dalvik implementován jako clean-room, což by znamenalo, že nedědí licenci (její omezení), pod kterou je Java Runtime (standardní ani opensourceová edice). Tento fakt je zdrojem pří, jež vyvolává hlavně Oracle.

Reference 

Virtuální stroje
Java
Android (operační systém)