Informações
| Tipo: | Artigo |
|---|---|
| Data de Publicação: | 20/07/2002 |
| Revisado em: | 20/07/2002 |
Vote!
Tags Relacionadas
Comentários ( 10 )
Imprimir
Gerando Código Nativo: Vantagens e Desvantagens
por:
Gleydson Lima (gleydson@jeebrasil.com.br)
Em busca de um código mais rápido, alguns programadores acreditam que devem trocar a facilidade de transporte entre plataformas do Java pela velocidade bruta. Como isso é feito? Será que vale a pena?
Em busca de um código mais rápido, alguns programadores acreditam que devem trocar a facilidade de transporte entre plataformas do Java pela velocidade bruta. Isso é feito compilando-se o código-fonte em Java para o código binário nativo de uma determinada plataforma, na qual o código é executado.
Em vez de o fonte Java ser compilado para um formato de bytecode intermediário, ele é compilado diretamente para instruções de máquinas nativas. Discutiremos nesse artigo as vantagens e desvantagens dessa abordagem.
A vantagem de se fazer isso é que não existe mas o overhead envolvido na conversão do formato de bytecode intermediário para o código binário nativo em tempo de execucao. Isso geralmente resulta em um código com execução mais rápida. Sua desvantagem é que o java normalmente perde sua facilidade de mudança de plataforma, embora isso possa não ser um problema. Há pelo menos uma solução para esse problema, que não exige a perda da facilidade de transporte de plataforma, enquanto consegue os benefícios da execução do código binário nativo.
Primeiro, considere a geração completa de código estático, por onde você planeja abandonar a portabilidade da plataforma Java. Se o código tiver que rodar apenas em uma máquina, então a geração estática de código pode ser uma solução parcial para os problemas de desempenho. Um exemplo de uso dessa técnica é quando se escreve um código para uma aplicação de servidor. O código irá rodar em um servidor, e terá que ser muito rápido.
A geração de código estático também é útil quando se escreve código para um dispositivo. Em geral, os dispositivos em que esses sistemas rodam têm limitações quanto ao armazenamento e à execução dessas aplicações. A geração de código nativo, pode ser uma boa alternativa por dois aspectos: (1) o código binário gerado precisa de um espaço menor de armazenamento. (2) a execução de código nativo pode alcançar melhor desempenho.
Vários fornecedores possuem soluções nativas para a plataforma Java. Muitas dessas soluções possuem uma coisa em comum: elas tratam o Java simplesmente como uma linguagem de programação, e não como uma solução interplataforma e portátil, para o qual foi projetada. É preciso considerar a inteireza da solução do fornecedor. Por exemplo, considere uma solução que trabalha com carregamento dinâmico de classe. É preciso garantir que outros recursos da plataforma Java envolvidos na solução sejam oferecidos pela solução.
É comum pensar que, ao gerar código nativo para uma determinada plataforma, a JVM passa a não ser mais necessária. Isso não é inteiramente verdade, dependendo da solução nativa que é usada. A compilação para o código binário nativo apresenta um problema com a coleta de lixo. Se todo o código for compilado para o código binário nativo, com a coleta de lixo irá funcionar sem uma JVM?
Existem diferentes estratégias para resolver/amenizar esse problema. Uma dessas soluções usa a seguinte estratégia: o código Java é compilado estaticamente, porém, ele é distribuído no sistema de destino com uma pequena máquina virtual que realiza a coleta de lixo. Essa solução tem a vantagem de deixar transparente para o programador o gerenciamento de memória da aplicação. No entanto, o programa não é tão pequeno quanto poderia ser.
Uma segunda solução é incluir uma palavra-chave delete em sua linguagem tipo Java. A desvantagem é que a inclusão de algo que não faça parte da especificação Java torna imediatamente qualquer código não portátil e incompatível entre as várias implementações do Java. A vantagem dessa técnica é que não é necessária uma JVM para realizar as tarefas de gerenciamento de memória. Por outro lado, a desvantagem dessa estratégia aparece quando o programador é forçado a controlar o uso de memória através da palavra-chave delete.
Outra solução é considerar a compilação de partes do seu programa para o código binário nativo, mantendo a portabilidade de plataforma do Java. Com isso, você retém os benefícios do Java, como a coleta de lixo e o carregamento dinâmico de classes, enquanto, tendo selecionado os métodos importantes para o desempenho são compilados em código binário nativo. Isso é feito com ferramentas que compilam métodos Java em particular para o código nativo otimizado, que é então acessado por meio da JNI ( Java Native Interface ). Essa solução oferece o melhor dos dois mundos. Você mantém a portabilidade de plataforma do Java enquanto aproveita os benefícios de desempenho da execução de métodos nativos otimizados.
Considere cuidadosamente as vantagens e desvantagens da compilação para o código binário nativo. Depois de pesar os lucros e as perdas, você poderá tomar uma decisão consciente a respeito das escolhas.
Comentários (10)
- Excelente artigo!
- postado por Rodrigo em 26/09/2006 às 23:21
- Muito bom
- postado por Gabriel em 27/09/2006 às 23:21
- Interessante, muito bom.
- postado por Paulino em 27/09/2006 às 23:21
- Sou iniciante em JAVA, li seu artigo e achei muito bacana. Mas acredito que deveríamos continuar acreditando na portabilidade da linguagem, desenvolvendo API's mais eficientes, e tentarmos ser mais flexíveis quanto a opção da linguagem de programação quando a mesma não atende totalmente s necessidades como por exemplo o RUNTIME que para o JAVA é um assunto delicado.projeto.
- postado por Mario Rizzi em 21/10/2006 às 23:21
- Bom dia, li e gostei muito do artigo, mas poderia me falar como passo meu aplicativo java para binario? Obrigado
- postado por Jose em 09/11/2006 às 23:21
- Boa tarde! O artigo é show de Bola ! Eu trabalho desenvolvendo software em java para desktop windows. Eu gostaria de saber se vocês poderiam me dizer algumas das ferramentas que eu poderia usar para compilar estáticamente minhas aplicações !
- postado por Fernando em 22/03/2007 às 23:21
- O artigo é muito bom, porém seria melhor ainda, se as questões de performace com método nativo fossem exemplificadas, e aprofundadas...! A questão é que as nem todas as aplicações em java necessitam de tamanha portabilidade que o java proporciona, entretanto devido a ser uma linguagem que "força" a organização do código orientado a obejtos, por exemplo, você pode programar em C usando um compilador c++, já o java "obriga" a criar pelo menos uma classe. Parabéns o artigo está ótimo!
- postado por Danilo em 19/05/2007 às 23:21
- Meu site foi desenvolvido em php e agora estou mudando p/ java para utilizar mais recursos q o atual não tem. Meu servidor oferecer o serviço em java - jvm dedicado. A nova versão do site está apresentando muita instabilidade no intranet na hora de atualizar os arquivos e acessar o bco de dados. Solicito indicações do melhor servidor do Brasil em hospedagem de site na linguagem java com todos os seus recursos tecnicos. Aguardo resposta URGENTE. Osvaldo Uchida contato@temdtudo.com
- postado por Osvaldo Uchida em 17/07/2007 às 23:21
- Osvaldo, o servidor de hospedagem que usamos é a Locaweb (www.locaweb.com.br).
- postado por David Pereira em 18/07/2007 às 23:21
- Ótimo artigo!
- postado por Samily em 09/09/2008 às 23:21
