Os aplicativos Android são interpretados em vez de compilados. Isso os torna mais lentos que os aplicativos iOS em tempo de execução?
Os aplicativos Android são interpretados em vez de compilados. Isso os torna mais lentos que os aplicativos iOS em tempo de execução?
Respostas:
Java não é interpretado no Android. Os aplicativos Android são compilados para o bytecode pelo desenvolvedor. Bytecode é uma representação compacta do programa: menor que o código fonte escrito pelo programador, mas ainda não é diretamente executável pela CPU. Algumas otimizações, como remoção de código morto, podem ser feitas neste estágio.
Quando você carrega o aplicativo em um dispositivo, a Dalvik JVM compila o bytecode no código executável nativo, assim que está prestes a ser executado. Esta é uma compilação just-in-time . Isso causa uma breve desaceleração enquanto o programa aguarda a compilação, mas depois disso não há sobrecarga de desempenho, porque o código foi compilado no código executável nativo.
Existem algumas vantagens de desempenho em fazê-lo dessa maneira, em vez de compilar antecipadamente no computador do desenvolvedor. O aplicativo pode ser compilado para a CPU específica do telefone, aproveitando seus recursos de hardware e usando suas características de desempenho. Por exemplo, ele pode usar operações de ponto flutuante de hardware se a CPU suportar. Além disso, um compilador JIT inteligente (reconhecidamente, Dalvik não é tão inteligente assim) pode monitorar a maneira como o programa é executado e executar otimizações com base na maneira como o programa é usado em uso real. Ele pode recompilar o código com dicas de ramificação melhores depois de ver quais opções estão ativadas e desativadas no ambiente, no telefone. Um compilador inicial não tem essas informações para usar.
O Dalvik usa o cache do Dalvik e outras técnicas para mitigar os inconvenientes da compilação do JIT. A nova JVM para Android L e posterior, ART, substitui o JIT inteiramente por um compilador antecipado . Isso compila o bytecode para o código executável nativo quando o aplicativo é instalado, para obter a maioria das vantagens do JIT sem demora no carregamento do aplicativo.
Não esqueça que os aplicativos Android não consistem inteiramente em Java. Os desenvolvedores têm o NDK para escrever todos ou parte de seus aplicativos em C ou C ++, para partes críticas do desempenho do aplicativo, especialmente para jogos. Interfaces para fins especiais, como OpenGL e Renderscript, permitem que os programadores tirem proveito de hardware especial, como o coprocessador GPU e SIMD, para alguns tipos de computação.
Então, realmente, não há uma resposta simples para sua pergunta. Usar o JIT em vez da compilação inicial torna algumas coisas mais rápidas, outras mais lentas. É apenas uma parte do desempenho geral do sistema operacional.
Como essa é uma pergunta ampla, aqui está uma resposta ampla.
"Os aplicativos iOS são mais rápidos que os aplicativos Android, pois os aplicativos Android são interpretados?"
Primeiro, os aplicativos para iOS não são "mais rápidos que" os aplicativos para Android.
Em segundo lugar, sobre o problema "Os aplicativos Android são interpretados". Isso é algo que você diria sobre computação, como "15 anos atrás": como você pode ver na discussão acima, a situação é muito mais complicada hoje; tecnologias inteiramente novas vieram à tona. O conceito "compilado é mais rápido do que interpretado!" foi relevante comparar, você sabe, perl com código de máquina há 20 anos; as coisas mudaram tanto que o problema não pode ser realmente claramente aplicado ao "iOS V Android" hoje.
Em terceiro lugar, há outros problemas na programação móvel que inundam totalmente essas considerações. Apenas um exemplo, os programadores móveis se empenham em lidar com grandes listas de rolagem de imagens, carregamento lento e problemas semelhantes. A maneira como os dois sistemas operacionais e as várias bibliotecas populares lidam com esses problemas críticos geralmente afasta outros.
Em quarto lugar, apenas mais uma questão esmagadora nos celulares são os problemas do chipset gráfico e os vários relacionamentos complicados disso com o software, o OpenGL e assim por diante. Por exemplo, a Apple está lançando um sistema que eles chamam de "Metal" em relação a esses problemas, e o Android está lançando seu próprio "coisinha" nesse campo. Esses problemas em torno do pipeline de gráficos são extremamente importantes para a sensação dos aplicativos na sua mão.
A resposta muito curta à sua pergunta é "V compilado interpretado" é basicamente um ponto de discussão desatualizado, você sabe?
(Além disso, eu particularmente não acho o Note3 "mais lento" do que o iPhone. Além disso, parte disso é puro artefato - existem telefones Android baratos: simplesmente não existem iPhones de baixo desempenho, portanto algumas pessoas podem estar incorretas idéias a partir disso.)
Porque aplicativos interpretados não significa que eles sempre são lentos. Às vezes, eles são mais poderosos e dinâmicos em comparação com o compilado. Como todos os códigos no aplicativo compilado são compilados uma vez e a saída é mantida na forma de bibliotecas ou executáveis, enquanto na linguagem interpretada, uma vez pode alterar aleatoriamente a sequência de execução. Então, eu posso dizer, depende de desenvolvedor para desenvolvedor e não há maneira de programação.
No entanto, Java (linguagem de programação do Android) não é interpretada, mas é compilada pelo JIT. Isso significa que os programas Android são compilados pouco antes de você executá-los, oferecendo um desempenho razoavelmente semelhante ao objetivo C. do iOS
Mais recentemente, a estrutura ART do Android pré-compila os aplicativos, para que sejam executados da mesma maneira que os aplicativos iOS. Em outras palavras, a próxima versão do Android provavelmente será tão rápida quanto o iOS.
Atualizar
As linguagens de programação geralmente se enquadram em uma de duas categorias: Compiladas ou Interpretadas. Com um idioma compilado, o código digitado é reduzido a um conjunto de instruções específicas da máquina antes de ser salvo como um arquivo executável. Com idiomas interpretados, o código é salvo no mesmo formato que você inseriu. Os programas compilados geralmente são executados mais rapidamente que os interpretados porque os programas interpretados devem ser reduzidos às instruções da máquina em tempo de execução. No entanto, com uma linguagem interpretada, você pode fazer coisas que não podem ser feitas em uma linguagem compilada. Por exemplo, programas interpretados podem se modificar adicionando ou alterando funções em tempo de execução. Também é geralmente mais fácil desenvolver aplicativos em um ambiente interpretado porque você não precisa recompilar seu aplicativo sempre que quiser testar uma pequena seção.