Propaganda

Você está atualmente debatendo se deve usar java para o seu próximo aplicativo ou usar kits de ferramentas e estruturas nativas? Gostaria de saber quais vantagens o java oferece sobre a programação nativa de um aplicativo? Leia mais para descobrir!

O que é um aplicativo nativo?

Um aplicativo nativo é um programa criado especificamente para um sistema operacional (SO) e, possivelmente, para o hardware específico que está executando esse SO. É principalmente escrito em um idioma como C / C ++. O código-fonte C / C ++ é compilado em um formulário de objeto usando um compilador, que é montado em um executável vinculando as bibliotecas necessárias. Um programa criado dessa maneira será executado no hardware e no SO específicos para os quais foi criado, mas pode não funcionar corretamente em outros sistemas.

Preparando um executável nativo

Por que os aplicativos nativos não são portáteis?

Um compilador para um idioma como C / C ++ converte instruções de código-fonte em linguagem de máquina para a CPU de destino. Quando você tenta executar esse código em uma CPU diferente, o programa pode não funcionar corretamente (ou funcionar), pois as instruções de idioma da máquina no código compilado podem não ser suportadas por esta CPU.

instagram viewer

Além disso, o novo sistema operacional pode ser diferente do original e pode nem reconhecer o arquivo de programa como um executável. Isso ocorre devido aos diferentes formatos de arquivo usados ​​para executáveis ​​em diferentes sistemas operacionais (como Windows, Linux, MacOS etc.).

A portabilidade é um problema tão grande nos aplicativos nativos que apenas a atualização do compilador para a próxima versão pode introduzir alterações significativas. Talvez seu código precise ser corrigido para funcionar com o compilador mais recente. Como tal, espalhando o código fonte com o que é conhecido como ifdef Instruções para isolar soluções alternativas específicas de hardware, sistema operacional ou compilador são comuns.

A seguir, um pequeno trecho de código de Biblioteca de compactação BZLib que ilustra o uso de ifdefs para isolar as peculiaridades da plataforma:

#ifdef _WIN32. # incluir # ifdef small / * windows.h define small para char * / # undef pequeno. # fim se. # ifdef BZ_EXPORT. # define BZ_API (func) WINAPI func. # define BZ_EXTERN externo. # else / * importar dll do Windows dinamicamente * / # define BZ_API (func) (WINAPI * func) # define BZ_EXTERN. # fim se. #outro. # define BZ_API (func) func. # define BZ_EXTERN externo. #fim se.

Portabilidade do código fonte nos sistemas operacionais

Essa situação pode ser aliviada até certo ponto recompilando o código-fonte C / C ++ na nova CPU. No entanto, o sistema operacional para a nova CPU pode ser diferente. E o código fonte pode não ser compilado sem alterações, sejam maiores ou menores. Mesmo pequenas alterações nas versões do sistema operacional podem exigir algumas alterações no código-fonte.

E quando você considera sistemas operacionais diferentes, como Windows e Linux / UNIX, a portabilidade é um jogo totalmente novo. A menos que você esteja usando um kit de ferramentas ou uma estrutura que o isola completamente do sistema operacional, a portabilidade do código fonte é impossível. Isso ocorre porque a interface do sistema operacional é completamente diferente entre esses sistemas. Se você, nos cantos mais remotos do seu código, usar qualquer primitiva de sistema operacional diretamente, seu código não será portátil entre esses diversos sistemas operacionais.

Como o Java é diferente?

É nesse cenário que o java oferece um novo paradigma, uma nova maneira de criar software. Ao programar em java, você direciona um máquina virtual. Essa máquina existe como um conceito, e a linguagem java fornece interfaces para a programação nessa máquina. Por exemplo, você pode consultar a quantidade de memória disponível, o número de CPUs, as interfaces de rede, etc. da máquina virtual.

Código de execução da máquina virtual

Como os aplicativos Java são criados?

A linguagem java fornece um compilador java que traduz o código-fonte em código de objeto. O código do objeto é então executado pelo Máquina Virtual JAVA, que é um programa separado do compilador. O sistema operacional, por sua vez, vê a máquina virtual java como apenas mais um programa em execução nesse sistema operacional.

O ônus da portabilidade passou do programador de aplicativos para o fornecedor de máquina virtual java. O programador de aplicativos grava o software usando as primitivas da linguagem java e o java máquina virtual é responsável por converter essas primitivas no sistema operacional host instalações. Quando uma nova versão do sistema operacional é lançada, é de responsabilidade do fornecedor atualizar a máquina virtual java para que funcione corretamente no novo sistema operacional.

Construindo programas Java

Quais são as vantagens da Java Virtual Machine?

Como mencionado anteriormente, a máquina virtual java fornece uma visão virtual do sistema operacional e do hardware para o programador de aplicativos. Essa visualização virtual está na forma de várias interfaces e métodos e serve para isolar o programador de aplicativos das diferenças no SO host e no hardware subjacente. Assim, o programador de aplicativos pode acessar recursos como um Windowing Toolkit, Rede, gráficos 3D, várias CPUs, etc. sem ter que recorrer a chamadas de baixo nível que acabam tornando o programa não portátil.

Um programa java é gravado e compilado usando o compilador java. O código do objeto resultante (chamado código de bytes) pode ser transportado para um sistema operacional host diferente, executando em hardware diferente e deve ser executado sem problemas.

Compilador JIT

A máquina virtual java usa um Compilador JIT otimizar o código de bytes especificamente para a CPU de destino. JIT significa Na hora certa e refere-se às otimizações de tempo de execução que a JVM aplica ao código de bytes para que ele funcione melhor na CPU atual.

Outra vantagem do uso da Java Virtual Machine é que ela pode aplicar otimizações diferentes para diferentes casos de uso, todos com o mesmo código de bytes. Por exemplo, a Oracle JVM fornece duas opções para executar o código de bytes: um modo de servidor e um modo de cliente. O modo de servidor otimiza para programas de servidor de execução longa, enquanto o modo JVM do cliente otimiza para tempos de resposta rápidos, pois provavelmente está sendo usado no modo interativo.

Para resumir, um aplicativo nativo é criado para um hardware e sistema operacional específico. Um aplicativo java, por outro lado, segue um Crie uma vez, execute em qualquer lugar filosofia, fazendo com que uma JVM execute as instruções de código de bytes compiladas. Embora os aplicativos nativos tenham sido tradicionalmente vistos como mais eficientes do que os aplicativos java, nem sempre isso ocorre devido ao uso de um compilador JIT pela JVM.

Você desenvolveu um aplicativo nativo e teve que mudar para java devido à portabilidade? Ou vice-versa devido a problemas de desempenho? Deixe-nos saber nos comentários abaixo.

Crédito de imagem: Profit_Image via Shutterstock.com