OK, isso realmente deveria ser perguntado a alguém do Google, mas eu só quero outras opiniões.
Mesmo o Android suporta aplicativos de código nativo, a principal ferramenta de desenvolvimento é Java. Mas por que? Quero dizer, não é muito lento interpretar o código em um dispositivo móvel? Ao apresentar o Froyo, o Google disse que o novo compilador JIT pode atingir aplicativos 2 a 5 vezes mais rápidos. Isso significa que usar Java em vez de código nativo é 2x vezes mais lento.
Sim, eu sei que usar aplicativos de código gerenciado é mais seguro em termos de estabilidade do sistema, já que a máquina virtual tem melhor controle do programa, mas ainda assim, essa queda de desempenho é enorme, e não vejo razão para usá-la.
Respostas:
Alguns pontos:
Java é uma linguagem conhecida, os desenvolvedores a conhecem e não precisam aprendê-la
é mais difícil atirar em si mesmo com Java do que com código C / C ++, pois não tem aritmética de ponteiro
ele é executado em uma VM, então não há necessidade de recompilá-lo para cada telefone lá fora e fácil de proteger
grande número de ferramentas de desenvolvimento para Java (ver ponto 1)
vários telefones celulares já usavam Java ME, então o Java era conhecido na indústria
a diferença de velocidade não é um problema para a maioria dos aplicativos; se fosse você deveria codificar em linguagem de baixo nível
fonte
No nível do código de byte, o Android não usa Java. A fonte é Java, mas não usa JVM.
fonte
A melhoria da estabilidade do sistema é muito importante em um dispositivo como um telefone celular.
A segurança é ainda mais importante. O ambiente Android permite que os usuários executem aplicativos semi-confiáveis que podem explorar o telefone de maneiras realmente desagradáveis, sem excelente segurança. Ao executar todos os aplicativos em uma máquina virtual, você garante que nenhum aplicativo pode explorar o kernel do sistema operacional, a menos que haja uma falha na implementação da VM. A implementação da VM, por sua vez, é presumivelmente pequena e tem uma superfície de segurança pequena e bem definida.
Talvez o mais importante, quando os programas são compilados para codificar para uma máquina virtual, eles não precisam ser recompilados para um novo hardware. O mercado de chips para telefones é diversificado e está mudando rapidamente, então isso é um grande negócio.
Além disso, o uso de Java torna menos provável que os aplicativos que as pessoas escrevem sejam exploráveis. Sem saturações de buffer, erros com ponteiros, etc ...
fonte
O código nativo não é necessariamente mais rápido do que o código Java. Onde estão os dados do seu perfil mostrando que o código nativo pode ser executado mais rápido?
Por que Java?
O Android funciona em muitas plataformas de hardware diferentes. Você precisaria compilar e otimizar seu código nativo para cada uma dessas plataformas diferentes para ver quaisquer benefícios reais.
Há um grande número de desenvolvedores já proficientes em Java.
Java tem um grande suporte de código aberto, com muitas bibliotecas e ferramentas disponíveis para tornar a vida dos desenvolvedores mais fácil.
Java protege você de muitos dos problemas inerentes ao código nativo, como vazamentos de memória, uso incorreto de ponteiros, etc.
Java permite que eles criem aplicativos sandbox e um modelo de segurança melhor para que um aplicativo ruim não consiga derrubar todo o sistema operacional.
fonte
Em primeiro lugar, de acordo com o Google, o Android não usa Java. É por isso que a Oracle está processando o Google. A Oracle alega que o Android infringe alguma tecnologia Java, mas o Google diz que é Dalvik.
Em segundo lugar, não vejo um interpretador de código de bytes Java desde 1995.
Você pode sustentar sua conjectura de desempenho com alguns benchmarks reais? O escopo de suas presunções não parece justificado, dadas as informações imprecisas que você forneceu.
fonte
Java tem um argumento bastante convincente para o Google usá-lo no Android: ele tem uma grande base de desenvolvedores. Todos esses desenvolvedores estão (mais ou menos) prontos para desenvolver para sua plataforma móvel.
Lembre-se de que, tecnicamente falando, o Android não usa Java puro .
fonte
Conforme mencionado em outro lugar, o principal problema é que o Android foi projetado como um sistema operacional portátil, para ser executado em uma ampla variedade de hardware. Ele também se baseia em uma estrutura e linguagem familiares a muitos desenvolvedores móveis existentes.
Finalmente, eu diria que é uma aposta contra o futuro - quaisquer problemas de desempenho existentes se tornarão irrelevantes à medida que o hardware melhorar - da mesma forma, ao fazer com que os desenvolvedores codifiquem uma abstração, o Google pode extrair e alterar o sistema operacional subjacente com muito mais facilidade do que se os desenvolvedores estavam codificando para as APIs POSIX / Unix.
Para a maioria dos aplicativos, a sobrecarga de usar uma linguagem baseada em VM em vez de nativa não é significativa (o gargalo para aplicativos que consomem serviços da web, como o Twitter, é principalmente a rede). O Palm WebOS também demonstra isso - e que usa JavaScript em vez de Java como linguagem principal.
Dado que quase todas as VMs JIT compilam para o código nativo, a velocidade do código bruto é frequentemente comparável à velocidade nativa. Muitos atrasos atribuídos a linguagens de nível superior têm menos a ver com a sobrecarga da VM do que outros fatores (um tempo de execução de objeto complexo, verificação de acesso à memória por meio de verificação de limites etc.).
Lembre-se também de que, independentemente da linguagem usada para escrever um aplicativo, muito do trabalho real é feito em APIs de nível inferior. A linguagem de nível superior geralmente é apenas encadear chamadas de API.
Existem, é claro, muitas exceções a essa regra - jogos, aplicativos de áudio e gráficos que ultrapassam os limites do hardware do telefone. Mesmo no iOS, os desenvolvedores geralmente optam por C / C ++ para obter velocidade nessas áreas.
fonte
O novo JIT está executando os aplicativos 2 a 5 vezes mais rápido do que o antigo dalvikVM (ambos JAVA). Portanto, a comparação não é C sobre JAVA, mas JIT sobre dalvikVM.
fonte
Em primeiro lugar, trata-se da mesma coisa que o Windows Mobile ou o iPhone, o framework .net precisa de sua própria VM, assim como de cacau.
E mesmo que o desempenho não seja o melhor, porque é uma interpretação do código de bytes, o Android traz toda a comunidade Java como desenvolvedores em potencial. Mais aplicativos, mais clientes, etc.
Para finalizar, nenhum desempenho não é tão ruim, é por isso que o java é usado mesmo em dispositivos menores (ver JavaMe).
fonte