Dalvik (software) - Dalvik (software)

Dalvik
Autor (es) original (is) Dan Bornstein
Repositório
Sistema operacional Kernel Linux
Plataforma Android
Sucessor Android Runtime
Modelo Máquina virtual
Licença Licença Apache 2.0
Local na rede Internet fonte .android .com / devices / tech / dalvik / index .html

Dalvik é uma máquina virtual (VM) de processo descontinuado no sistema operacional Android que executa aplicativos escritos para Android. (O formato de bytecode Dalvik ainda é usado como formato de distribuição, mas não mais em tempo de execução nas versões mais recentes do Android.) Dalvik era parte integrante da pilha de software Android nas (agora sem suporte) versões 4.4 "KitKat" e anteriores do Android , que eram comumente usado em dispositivos móveis, como telefones celulares e tablets , e mais em alguns dispositivos, como TVs inteligentes e wearables . Dalvik é um software de código aberto , originalmente escrito por Dan Bornstein, que o nomeou em homenagem à vila de pescadores de Dalvík em Eyjafjörður , Islândia .

Programas para Android são comumente escritos em Java e compilados em bytecode para a máquina virtual Java , que é então traduzido para bytecode Dalvik e armazenado em arquivos.dex ( Dalvik EXecutable ) e .odex( Optimized Dalvik EXecutable ); termos relacionados odex e de-odex estão associados às respectivas conversões de bytecode. O formato compacto Dalvik Executable é projetado para sistemas que são limitados em termos de memória e velocidade do processador .

O sucessor do Dalvik é o Android Runtime (ART), que usa os mesmos arquivos bytecode e .dex (mas não arquivos .odex), com a sucessão visando melhorias de desempenho transparentes para os usuários finais . O novo ambiente de execução foi incluído pela primeira vez no Android 4.4 "KitKat" como uma prévia da tecnologia e substituiu o Dalvik inteiramente nas versões posteriores; O Android 5.0 "Lollipop" é a primeira versão em que ART é o único tempo de execução incluído.

Arquitetura

Uma comparação das arquiteturas Dalvik e ART

Ao contrário das Java Virtual Machines , que são máquinas de pilha , o Dalvik VM usa uma arquitetura baseada em registro que requer menos instruções de máquina virtual, normalmente mais complexas. Os programas Dalvik são escritos em Java usando a interface de programação de aplicativos (API) Android , compilados em bytecode Java e convertidos em instruções Dalvik conforme necessário.

Uma ferramenta chamada dxé usada para converter arquivos Java .class no formato .dex. Várias classes são incluídas em um único arquivo .dex. Cadeias de caracteres duplicadas e outras constantes usadas em vários arquivos de classe são incluídas apenas uma vez na saída .dex para economizar espaço. O bytecode Java também é convertido em um conjunto de instruções alternativo usado pela VM Dalvik. Um arquivo .dex descompactado normalmente é um pouco menor em tamanho do que um arquivo Java compactado (JAR) derivado dos mesmos arquivos .class.

Os executáveis ​​Dalvik podem ser modificados novamente quando instalados em um dispositivo móvel. A fim de obter otimizações adicionais , a ordem dos bytes pode ser trocada em certos dados, estruturas de dados simples e bibliotecas de funções podem ser vinculadas em linha e objetos de classe vazios podem ser curto-circuitados, por exemplo.

Sendo otimizado para requisitos de baixa memória, Dalvik tem algumas características específicas que o diferenciam de outras VMs padrão:

  • A VM foi reduzida para usar menos espaço.
  • O pool constante foi modificado para usar apenas índices de 32 bits para simplificar o interpretador .
  • Bytecode Java padrão executa instruções de pilha de 8 bits . Variáveis ​​locais devem ser copiadas para ou da pilha de operandos por instruções separadas. Em vez disso, a Dalvik usa seu próprio conjunto de instruções de 16 bits que funciona diretamente nas variáveis ​​locais. A variável local é comumente escolhida por um campo de "registro virtual" de 4 bits . Isso diminui a contagem de instruções de Dalvik e aumenta a velocidade do intérprete.

De acordo com o Google, o design do Dalvik permite que um dispositivo execute várias instâncias da VM de forma eficiente.

O Android 2.2 "Froyo" trouxe a compilação just-in-time (JIT) baseada em rastreamento para a Dalvik, otimizando a execução de aplicativos ao criar perfis de aplicativos continuamente cada vez que eles são executados e compilando dinamicamente segmentos curtos frequentemente executados de seu bytecode em código de máquina nativo . Enquanto Dalvik interpreta o resto do bytecode do aplicativo, a execução nativa desses curtos segmentos de bytecode, chamados de "traces", fornece melhorias significativas de desempenho.

atuação

Um telefone com tecnologia Dalvik

Os méritos relativos de máquinas de pilha versus abordagens baseadas em registradores são um assunto de debate contínuo.

Geralmente, as máquinas baseadas em pilha devem usar instruções para carregar dados na pilha e manipular esses dados e, portanto, exigem mais instruções do que máquinas de registro para implementar o mesmo código de alto nível , mas as instruções em uma máquina de registro devem codificar a fonte e registros de destino e, portanto, tendem a ser maiores. Essa diferença é importante para os intérpretes de VM, para os quais o envio de opcode tende a ser caro, junto com outros fatores igualmente relevantes para a compilação just-in-time .

Testes realizados em dispositivos ARMv7 em 2010 pela Oracle (proprietária da tecnologia Java) com benchmarks Java não gráficos padrão mostraram que o HotSpot VM do Java SE integrado é 2–3 vezes mais rápido do que o Dalvik VM baseado em JIT do Android 2.2 (o versão inicial do Android que incluía um compilador JIT). Em 2012, benchmarks acadêmicos confirmaram o fator de 3 entre HotSpot e Dalvik na mesma placa Android, também observando que o código Dalvik não era menor que Hotspot.

Além disso, em março de 2014, os benchmarks realizados em um dispositivo Android ainda mostram um fator de 100 entre os aplicativos nativos e um aplicativo Dalvik no mesmo dispositivo Android. Ao executar benchmarks usando o intérprete anterior de 2009, tanto o Java Native Interface (JNI) quanto o código nativo mostraram uma aceleração da ordem de magnitude.

Licenciamento e patentes

Dalvik é publicado sob os termos da Licença Apache 2.0. Alguns dizem que Dalvik é uma implementação de sala limpa em vez de um desenvolvimento em cima de um Java runtime padrão, o que significaria que ele não herda as restrições de licença baseadas em copyright dos tempos de execução Java da edição padrão ou da edição de código-fonte aberto. A Oracle e alguns revisores contestam isso.

Em 12 de agosto de 2010, a Oracle , que adquiriu a Sun Microsystems em abril de 2009 e, portanto, detém os direitos do Java, processou o Google por alegar violação de direitos autorais e patentes. A Oracle alegou que o Google, ao desenvolver o Android, violou intencionalmente, direta e repetidamente a propriedade intelectual da Oracle relacionada ao Java. Em maio de 2012, o júri neste caso concluiu que o Google não infringia as patentes da Oracle, e o juiz determinou que a estrutura das APIs Java usadas pelo Google não tinha direitos autorais. As partes concordaram em zero dólares em danos legais para 9 linhas do código copiado.

Veja também

Referências

links externos