JIT: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
m Revertidas edições por 200.238.81.61, para a última versão por Luís Felipe Braga
Gfc (discussão | contribs)
Nova versão para o esboço. Parte significativa do texto foi traduzida/adaptado do mesmo verbete na Wikipedia em inglês.
Linha 1:
{{Outrosusos|Just in time}}
'''JIT''' é um acrônimo para '''J'''ust '''i'''n '''T'''ime Compiler.
 
Em [[Ciência da Computação]], '''JIT''' é o acrônimo para '''compilador just-in-time''', que é um tradutor que converte, em tempo de execução, instruções de um formato para outro, por exemplo, de [[bytecode]] para [[código de máquina]]. Esta técnica é normalmente utilizada para incrementar o desempenho de programas "executados" - na verdade, interpretados - em máquinas virtuais.
A técnica de JIT permite que antes que seja executado um código interpretado, ele seja convertido para [[código nativo]] da [[CPU]] onde ele será executado, melhorando a performance de execução do mesmo.
 
== Visão Geral ==
{{esboço-programação}}
 
Em sistemas computacionais baseados em máquinas virtuais, como Java e .NET, o processo de compilação traduz o código fonte para uma representação intermediária conhecida pelo termo [[bytecode]]. Esta representação intermediária não está associada a nenhum código de máquina específico e pode ser transportada para várias arquiteturas de computador distintas. Em cada arquitetura específica, essa representação intermediária é interpretada - ou executada em uma [[máquina virtual]].
 
Nos ambientes que oferecem o recurso de JIT, a [[máquina virtual]] responsável pela execução dos [[bytecode]]s resultantes da compilação do programa fonte realiza a tradução desse [[bytecode]] para [[código de máquina]] nativo enquanto o executa. No caso mais comum, cada trecho de código será traduzido no instante em que está para ser executado pela primeira vez, daí derivando o nome "just-in-time".
 
A idéia de um sistema que suporta o conceito de JIT é combinar as vantagens da compilação tradicional - que converte o código fonte diretamente para [[código de máquina]] - e do conceito de máquinas virtuais, baseadas em [[bytecode]]. A custosa tarefa de analisar e verificar o código fonte do programa original é realizada pelo processo de compilação para [[bytecode]], em tempo de desenvolvimento. Também nesta fase, são realizadas todas as possíveis otimizações baseadas na análise do código fonte, obtendo-se um conjunto de [[bytecode]]s otimizados e semanticamente equivalente ao programa fonte original. O programa objeto resultante deste processo de compilação é transportável para as várias arquiteturas distintas que suportam a [[máquina virtual]] alvo da compilação, isto é, que possuem um interpretador de [[bytecode]]. Durante a execução do programa, o compilador JIT realiza apenas a tradução de [[bytecode]] para [[código de máquina]], que é uma tarefa muito mais simples e mais rápida.
 
Esse mecanismo de execução apresenta um desempenho significativamente superior ao processo clássico de interpretação. Isto porque o [[código de máquina]] resultante da compilação JIT é armazenado na memória, garantindo que o trecho de código em questão não será mais recompilado ou reinterpretado sempre que, durante a execução do programa, for novamente executado. Além disso, muitos compiladores JIT possuem mecanismos para realizar otimizações adicionais nos trechos de código do programa que são executados com maior freqüência.
 
Entretanto, o mecanismo de execução baseado em compiladores JIT pode causar um pequeno atraso no início da execução de uma aplicação, em função de ter que compilar o [[bytecode]] para [[código de máquina]]. Naturalmente, quanto mais otimização o compilador JIT realizar, mais rápida tenderá a ser a execução do programa alvo, porém maior será o atraso no início da execução. Por conta disso, os compiladores JIT mais bem elaborados normalmente realizam um balanceamento criterioso entre o tempo a ser gasto com a compilação e a qualidade de código que ele pretende gerar.
 
Dois exemplos de plataformas que se utilizam de compiladores JIT são o ambiente [[Linguagem de programação Java|Java]] e o ambiente [[Microsoft .NET|.NET]]. No caso do ambiente [[Linguagem de programação Java|Java]], o compilador de Java traduz o programa fonte para uma representação intermediária (programa objeto) conhecida pelo termo [[bytecode]]. Posteriormente, o programa objeto será interpretado pela [[máquina virtual]] Java. No caso do ambiente [[Microsoft .NET|.NET]], a representação intermediária é conhecida pelo termo Commom Intermediate Language (CIL), que será interpretada pela [[máquina virtual]] do ambiente [[Microsoft .NET|.NET]], chamada [[Common Language Runtime]].
 
 
=={{Ver também}}==
* [[Máquina Virtual]]
* [[Compilador]]
* [[Interpretadores]]
* [[Bytecode Java]]
* [[Linguagem de programação Java|Java]]
* [[Common Language Runtime]]
* [[Microsoft .NET|.NET]]
 
 
{{esboço-programaçãoprog}}
 
[[Categoria:Terminologia informática]]
[[Categoria:Programação]]
 
== Links Externos ==
*[http://www.gnu.org/software/lightning/ GNU ''lightning''] — Uma biblioteca que gera código de máquina em tempo de execução
[[de:JIT-Compiler]]
[[en:Just-in-time compilation]]
[[es:Compilación en tiempo de ejecución]]
[[fr:Compilation à la volée]]
Linha 15 ⟶ 42:
[[ja:ジャストインタイムコンパイル方式]]
[[pl:JIT (informatyka)]]
[[pt:JIT]]
[[ru:JIT]]
[[sv:JIT-kompilator]]