Máquinas Virtuais: Java e Dalvik
Por: Jose.Nascimento • 27/6/2018 • 1.511 Palavras (7 Páginas) • 280 Visualizações
...
Ambiente de Execução: usada para referenciar funções, verificar retorno de métodos e lançar erros, mantém uma pilha armazenando determinados valores de referência. Por exemplo, ao término de um método no programa, se o retorno foi o esperado por aquele método, os registradores do método anterior são restaurados e a execução continua. Se o retorno não era o esperado, é lançado um erro ou exceção no sistema.
Alocação de memória: Armazena instâncias de objetos em uso pelo sistema, mantendo o controle da memória total. Esse uso da memória reflete na memória física do sistema. Se o espaço ocupado por esses objetos na memória alcançar um determinado limite, objetos que não estão mais em uso são desalocados automaticamente por um método da JVM chamado de garbage collector (coletor de lixo). Dependendo do sistema operacional e do hardware que está rodando a aplicação, esse método pode ser invocado com maior frequência (em casos onde há pouca memória) ou de maneira mais branda (quando o sistema possui mais recursos disponíveis).
Constantes: para cada classe carregada na memória, é mantido um grupo de constantes associado. Esse grupo é criado na compilação.
Área de métodos: Mantém as instruções de cada método/função do programa em bytecode e suas ligações com o ambiente de execução.
Conjunto de instruções bytecode: Similar a uma linguagem de montagem, o conjunto de instruções utilizado pela JVM usa tipos primitivos (int, long, float, double) e alguns valores de referência especiais para representar os dados dos operandos e endereços, com instruções específicas para cada tipo de dado sendo usado.
---------------------------------------------------------------
-
Dalvik Virtual Machine
-
Introdução
Dalvik virtual machine (DVM) é a máquina virtual de propósito específico ao sistema operacional Android, sendo ambas desenvolvidas pela Google. Embora a própria empresa Google utilize a linguagem de programação Java para desenvolver seus aplicativos para o sistema Android, ela abandonou a utilização da máquina virtual Java (JVM) por duas razões. A primeira é que a máquina virtual e as bibliotecas Java não suportariam a limitação de recursos que os dispositivos móveis possuem, como por exemplo a baixa memória RAM, baixa memória de armazenamento, baixa velocidade de processamento e o uso de bateria como fonte de energia. A segunda é a vasta variedade de aplicativos existentes para o Android e para diferentes dispositivos móveis consequentemente, e também com o fato de que essas aplicações são desenvolvidas com diferentes linguagens de programação, resultando na necessidade de maior fragmentação da plataforma por parte de implementações de aplicativos que não são programados em Java.
Para manter a estabilidade e segurança das aplicações e da plataforma, 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 a estes dispositivos, como por exemplo a vida de bateria, processamento e consumo de memória.
-
Funcionamento
Cada aplicação no Android executa seu próprio processo, com sua própria instância da DVM. Dalvik foi desenvolvido para que um dispositivo execute várias máquinas virtuais eficientemente. Com o tamanho reduzido da DVM, ela é executada com o mínimo de 24MB, gerenciando a memória tanto da máquina quanto às aplicações sendo executadas pelo comando do usuário. A performance e baixo consumo de memória é possível com a arquitetura da DVM baseada em registradores, equivalente às CPUs que também são baseadas em pilha, mapeando bytes de forma mais rápida e fluída. A DVM executa arquivos em formato Dalvik Executable (.dex), que é optimizado para registro mínimo e compartilhamento de memória. A Dalvik executa classes do código que compilado por um compilador de linguagem Java. O compilador do DVM é o JIT (Just in Time), que compila os bytecodes Dalvik para instruções nativas projetadas especificamente para o DVM, contribuindo para o porte de diferentes linguagens de programação para a plataforma. Esse compilador foi modificado para converter o código para classes com extensão .class e depois converter as classes para o formato .dex, que utiliza áreas específicas e constantes como mecanismo primário de preservação de memória. Essas áreas (pools) constantes armazenam todos os valores constantes de diferentes tipos de variáveis incluídos no código original, agora localizado nas classes. Ao invés de armazenar os valores pela classe, eles são indicados pelo índice da área constante. A duplicação de valores constantes é eliminada no último estágio de compilação.
Como toda a aplicação é executada em sua própria instância da máquina virtual, a inicialização da máquina virtual deve ser rápida quando uma nova aplicação é iniciada e quando o acesso a memória da máquina virtual deve ser mínimo. Então, para o Dalvik, foi instaurado o conceito de Zygote (zigoto) para permitir o compartilhamento do código através das instâncias da máquina virtual e prover uma rápida inicialização para novas instâncias. Cada uma dessas instâncias possui suas próprias permissões, permitindo a eficiência e segurança entre os processos independentes. O Zygote é uma máquina virtual iniciada no boot do sistema, carregando previamente e inicializando as principais classes de bibliotecas que, sendo apenas para leitura, otimizam o compartilhamento e carregamento de vários processos.
---------------------------------------------------------------
-
Referências
Entenda como Funciona a Java Virtual Machine (JVM)
Disponível em: http://www.devmedia.com.br/entenda-como-funciona-a-java-virtual-machine-jvm/27624
Oracle – The Java® Virtual Machine Specification
...