O que você não pode fazer sobre o Dalvik VM (do Android VM) que você pode em Sun VM?

StackOverflow https://stackoverflow.com/questions/230193

  •  04-07-2019
  •  | 
  •  

Pergunta

Eu sei que você pode executar quase todos Java em VM Dalvik que você pode em VM de Java , mas as limitações não são muito claras. Ninguém foi executado em qualquer um dos principais obstáculos? Quaisquer grandes bibliotecas tendo problemas? Os idiomas que compilação de código Java byte ( Scala , Jython etc ...) não funcionam como esperado?

Foi útil?

Solução

Há uma série de coisas que Dalvik não vai lidar ou não lidar com exatamente da mesma maneira como bytecode Java padrão, embora a maioria deles são bastante avançado.

O exemplo mais grave é runtime geração bytecode e classe personalizada carregamento. Vamos dizer que você gostaria de criar alguns bytecode e use carregador de classe para carregá-lo para você, se esse truque funciona em sua máquina normal, ele é garantido para não trabalhar em Dalvik, a menos que você mudar a sua geração de bytecode.

que o impede de usar certos enquadramentos de injeção de dependência, mais conhecido exemplo é o Google Guice (embora eu tenho certeza que algumas pessoas trabalham sobre isso). Por outro lado AspectJ deve funcionar como ele usa instrumentação bytecode como uma etapa de compilação (embora eu não sei se alguém tentasse).

Como para outras linguagens JVM - qualquer coisa que nos compila finais para bytecode padrão e não usa instrumentação bytecode em tempo de execução pode ser convertido em Dalvik e deve funcionar. Sei que as pessoas correram Jython no Android e funcionou ok.

Outra coisa a ter em conta é que não existe não apenas em tempo de compilação . Isto não é estritamente problema Dalviks (você sempre pode compilar qualquer bytecode em tempo real, se quiser), mas que o Android não suporta isso e é improvável que o faça. No efeito, enquanto microbenchmarking para Java padrão era inútil - componentes tinham diferentes characterstics tempo de execução em testes do que como partes de sistemas maiores -. Microbenchmarks para telefones Android totalmente faz sentido

Outras dicas

Se você ver " Dalvik Virtual Machine internos " sessão Google IO, você pode encontrar O Dalvik não suporta geracional GC .

Assim, poderia degradar o desempenho de criação do objeto frequente e exclusão. Java VM suporta GC geracional assim, ele iria mostrar um melhor desempenho GC para a mesma situação.

E também, Dalvik usa trace-granuality href="http://dl.google.com/googleio/2010/android-jit-compiler-androids-dalvik-vm.pdf" JIT vez de JIT método granuality.

Outra coisa que eu acho que poderia ser adicionado aqui é que Dalvik, aparentemente, não preservar a ordem campo ao listar os campos de uma classe usando a API reflexão. Agora, o reflexo API não faz quaisquer garantias sobre isso de qualquer maneira (por isso, idealmente, você não deve depender de qualquer maneira), mas na maioria das outras VMs lá fora, do preservar a ordem.

Só para acrescentar à conversa, não se destina a revitalizar uma discussão antiga. Eu só corri em toda esta em minha busca, e quero acrescentar que Jython não funciona fora da caixa com Dalvik também. Simplesmente tentando fazer um exemplo Olá mundo irá produzir o seguinte:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top