Tudo sobre a máquina virtual Dalvik do Android

android-dalvik

Segundo GARGENTA (2011), “Dalvik é uma máquina virtual de propósito específico projetada especificamente para Android, desenvolvida por Dan Bornstein e seu time no Google”. Uma vez que o hardware dos dispositivos Android pode e geralmente é bem limitado quanto aos recursos disponíveis, a máquina virtual Java não atenderia às necessidades da plataforma, tendo de ser construída uma nova. O nome Dalvik remete a um vilarejo da Islândia e foi escolhido por Bornstein (LINSTAEDT, 2012).

A JVM tradicional e a Dalvik VM diferem em muitos aspectos, principalmente no que tange à portabilidade e suporte à bibliotecas de terceiros. Outros recursos como gerenciamento de memória e compilação JIT também foram profundamente alterados, tornando-a muito mais econômica em termos de consumo de memória e mais performática quanto ao uso de CPU. Além disso, outras propostas de máquinas virtuais em substituição à Dalvik estão sendo projetadas e desenvolvidas, buscando obter um ajuste ainda mais fino com relação às necessidades da plataforma que evoluiu bastante desde sua criação.

dalvik-android

Comparativo entre a Dalvik VM e a JVM

GARGENTA (2011) nos diz que a máquina virtual Java (JVM) foi projetada para ser uma solução única para todos os problemas, e o time da Dalvik sentiu que podia fazer um trabalho melhor focando estritamente em dispositivos móveis. Eles olharam para restrições específicas de um ambiente móvel que dificilmente mudariam com o passar dos anos. Como exemplo podemos citar vida da bateria e poder de processamento. Dalvik foi construída do zero para endereçar estes problemas.

Como primeira e uma das principais diferenças entre a JVM e a Dalvik está o código que cada uma interpreta, uma vez que os bytecodes de cada uma são exclusivos de sua plataforma e até mesmo os arquivos possuem formatos diferentes, sendo que a Dalvik utiliza a extensão .DEX ao invés da .JAR tradicional (LINSTAEDT, 2012).

Com relação ao gerenciamento de memória o tamanho reduzido da vm permite que ela seja executada com um valor mínimo de 24MB, sendo que a memória é utilizada não somente para o código da máquina virtual em si (com as bibliotecas do sistema) mas ainda as aplicações do usuário. Um dos fatores predominantes para a performance e o baixo consumo de memória é a arquitetura baseada em registradores ao invés da tradicional pilha da JVM. Segundo LINSTAEDT (2012), como as CPUs são baseadas em registradores, o mapeamento para byte codes baseados em registradores é mais natural e rápido. Para cada aplicação iniciada, o processo Zigoto cria uma nova instância da VM que roda independente das demais, com suas próprias permissões e seu próprio coletor de lixo (garbage collector), otimizando a segurança e eficiência dos processos.

Curso React Native

E por fim, o compilador JIT (Just-in-Time), introduzido com a versão 2.2 da plataforma Android (LINSTAEDT, 2012) compila os bytecodes Dalvik para as instruções nativas conforme são necessários, acelerando sua execução. Estas instruções nativas foram projetadas especificamente para a Dalvik VM o que contribui para a diminuição de compatibilidade com bibliotecas Java de terceiros, mas que permite a engenheiros portarem suas linguagens favoritas para a plataforma, bastando desenvolver um compilador específico para o formato de bytecodes Dalvik. Vale salientar que em caso de falha na compilação do JIT, o controle é passado diretamente ao interpretador Dalvik que irá trabalhar sem o recurso de aceleração proporcionado pelo compilador.

Ainda que estejamos citando apenas contextos técnicos acerca das diferenças entre as máquinas virtuais, cabe ressaltar ainda que existe um forte motivo legal para a criação da Dalvik, uma vez que a JVM tradicional é propriedade da Oracle. Ao criar uma máquina virtual realmente aberta e com licença amigável, o Android provê uma plataforma que encoraja os fabricantes à adotarem-na.

Máquinas Virtuais Alternativas

Como citado anteriormente, a arquitetura da Dalvik VM aliada à especificação extremamente aberta da plataforma permite que outros fabricantes possam extendê-la ou até mesmo evoluí-la, como é o caso das máquinas virtuais alternativas para a plataforma Android. A solução alternativa à Dalvik mais conhecida e bem-sucedida da atualidade é a Dalvik Turbo, da empresa suíça Myriad. Com base nesta VM Dalvik alternativa, a Myriad tem criado produtos como a VM Myriad Alien Dalvik (MYRIAD, 2012), que nada mais é do que uma VM para rodar aplicações Android em dispositivos que não possuem este sistema operacional. Além disso, em virtude das considerações de desempenho da Dalvik Turbo, que em alguns testes se provou ser até 3 vezes mais rápida que a VM Dalvik tradicional, alguns fabricantes como a MIPS technologies adotou a Dalvik Turbo como a VM padrão de seus dispositivos Android (BERNIER, 2011).

A Myriad, que é uma das fundadoras e principais contribuidoras da Open Handset Alliance (OHA, entidade que mantém o Android) conseguiu otimizar drasticamente tarefas árduas como renderização de games pesados em dispositivos móveis e dizem manter total compatibilidade com aplicações Android desenvolvidas para a VM Dalvik tradicional, estando disponível para todas as arquiteturas-chave da plataforma, incluindo ARM, Atom e MIPS (ZIEGLER, 2010). A otimização de instruções vem junto com uma maior economia de bateria e tmelhor tempo de resposta do dispositivo frente às necessidades das aplicações. Implementações de VMs Dalvik bem sucedidas como essa mostram o potencial da plataforma e endossam a qualidade da arquitetura promovida pelo time de engenheiros da Dalvik VM.

Conclusões

A máquina virtual Dalvik foi projetada especificamente para ser uma solução dedicada à plataforma Android e aos dispositivos móveis que a usam, tornando-a uma escolha que se encaixa perfeitamente nas necessidades comuns à estes dispositivos, como vida de bateria, processamento, consumo de memória, etc, diferentemente da JVM tradicional que é de propósito geral.

Existem muitas diferenças entre as máquinas virtuais citadas, entre elas o código nativo que é interpretado, as instruções de baixo nível, o gerenciamento de memória e principalmente: suas arquiteturas. A Dalvik se propõe a trabalhar de uma maneira mais precisa e de baixo nível que a JVM tradicional, proporcionando um controle mais exato e de maior desempenho dos recursos com o uso de registradores e isolamento de processos em instâncias da própria VM.

Finalmente, sua arquitetura aberta e padrão propício à extensão e evolução permite que empresas como a Myriad desenvolvam suas próprias versões da VM, focando em nichos ainda mais específicos que o “mercado móvel” como soluções para processamento gráfico e outras tarefas que exijam elevado desempenho computacional mas ainda dentro das restrições de um dispositivo móvel.

Referências

GARGENTA, M.; Learning Android. O’Reilly: California, 2011, 268p.

LINDSTAEDT, E.; Introdução à Plataforma Android, 2012. Disponível em: <http://www.moodle.unisinos.br/file.php/4781/INTRODUCAO_A_PLATAFORMA_ANDROID/SEMANA_1/Ernesto_texto_sem1.pdf>. Acesso em: 13 outubro 2012.

MYRIAD; Myriad Alien Dalvik, 2012. Disponível em: < http://www.myriadgroup.com/Myriad/Device-Manufacturers/Android-solutions/~/media/D42B513FB5114FF2B4CA13A2D8CE313E.ashx>. Acesso em: 20 outubro 2012.

BERNIER, J.; MIPS Technologies Adopts Myriad’s Dalvik Turbo VM Engine for its Android on MIPS Distribution, 2011. Disponível em: < http://www.myriadgroup.com/Myriad/Device-Manufacturers/Android-solutions/~/media/D42B513FB5114FF2B4CA13A2D8CE313E.ashx>. Acesso em: 20 outubro 2012.

ZIEGLER, C.; Swiss firm claims huge boost in Android app performance, battery life with new virtual machine, 2010. Disponível em: < http://www.myriadgroup.com/Myriad/Device-Manufacturers/Android-solutions/~/media/D42B513FB5114FF2B4CA13A2D8CE313E.ashx>. Acesso em: 20 outubro 2012.

* OBS: curtiu o post? Então dá uma olhada no meu livro de Android clicando no banner abaixo pra aprender a criar outros tantos apps incríveis!

Criando apps para empresas com Android

Publicado por

Luiz Duarte

Pós-graduado em computação, professor, empreendedor, autor, Agile Coach e programador nas horas vagas.