b'\n_START_ARTICLE_\nJIT\n_START_SECTION_\nVis\xc3\xa3o Geral\n_START_PARAGRAPH_\nEm sistemas computacionais baseados em m\xc3\xa1quinas virtuais, como Java e .NET, o processo de compila\xc3\xa7\xc3\xa3o traduz o c\xc3\xb3digo fonte para uma representa\xc3\xa7\xc3\xa3o intermedi\xc3\xa1ria conhecida pelo termo bytecode. Esta representa\xc3\xa7\xc3\xa3o intermedi\xc3\xa1ria n\xc3\xa3o est\xc3\xa1 associada a nenhum c\xc3\xb3digo de m\xc3\xa1quina espec\xc3\xadfico e pode ser transportada para v\xc3\xa1rias arquiteturas de computador distintas. Em cada arquitetura espec\xc3\xadfica, essa representa\xc3\xa7\xc3\xa3o intermedi\xc3\xa1ria \xc3\xa9 interpretada - ou executada em uma m\xc3\xa1quina virtual._NEWLINE_Nos ambientes que oferecem o recurso de JIT, a m\xc3\xa1quina virtual respons\xc3\xa1vel pela execu\xc3\xa7\xc3\xa3o dos bytecodes resultantes da compila\xc3\xa7\xc3\xa3o do programa fonte realiza a tradu\xc3\xa7\xc3\xa3o desse bytecode para c\xc3\xb3digo de m\xc3\xa1quina nativo enquanto o executa. No caso mais comum, cada trecho de c\xc3\xb3digo \xc3\xa9 traduzido no instante em que est\xc3\xa1 para ser executado pela primeira vez, da\xc3\xad derivando o nome "just-in-time"._NEWLINE_A ideia de um sistema que suporta o conceito de JIT \xc3\xa9 combinar as vantagens da compila\xc3\xa7\xc3\xa3o tradicional - que converte o c\xc3\xb3digo fonte diretamente para c\xc3\xb3digo de m\xc3\xa1quina - e do conceito de m\xc3\xa1quinas virtuais, baseadas em bytecode. A custosa tarefa de analisar e verificar o c\xc3\xb3digo fonte do programa original \xc3\xa9 realizada pelo processo de compila\xc3\xa7\xc3\xa3o para bytecode, em tempo de desenvolvimento. Tamb\xc3\xa9m nesta fase, s\xc3\xa3o realizadas todas as poss\xc3\xadveis otimiza\xc3\xa7\xc3\xb5es baseadas na an\xc3\xa1lise do c\xc3\xb3digo fonte, obtendo-se um conjunto de bytecodes otimizados e semanticamente equivalente ao programa fonte original. O programa objeto resultante deste processo de compila\xc3\xa7\xc3\xa3o \xc3\xa9 transport\xc3\xa1vel para as v\xc3\xa1rias arquiteturas distintas que suportam a m\xc3\xa1quina virtual alvo da compila\xc3\xa7\xc3\xa3o, isto \xc3\xa9, que possuem um interpretador de bytecode. Durante a execu\xc3\xa7\xc3\xa3o do programa, o compilador JIT realiza apenas a tradu\xc3\xa7\xc3\xa3o de bytecode para c\xc3\xb3digo de m\xc3\xa1quina, relativo a interpreta\xc3\xa7\xc3\xa3o. Isso resulta numa tarefa muito mais simples e mais r\xc3\xa1pida._NEWLINE_Esse mecanismo de execu\xc3\xa7\xc3\xa3o apresenta um desempenho significativamente superior ao processo cl\xc3\xa1ssico de interpreta\xc3\xa7\xc3\xa3o. Isto porque o c\xc3\xb3digo de m\xc3\xa1quina resultante da compila\xc3\xa7\xc3\xa3o JIT \xc3\xa9 armazenado na mem\xc3\xb3ria, garantindo que o trecho de c\xc3\xb3digo em quest\xc3\xa3o n\xc3\xa3o ser\xc3\xa1 mais recompilado ou reinterpretado sempre que, durante a execu\xc3\xa7\xc3\xa3o do programa, for novamente acionado. Al\xc3\xa9m disso, muitos compiladores JIT possuem mecanismos para realizar otimiza\xc3\xa7\xc3\xb5es adicionais nos trechos de c\xc3\xb3digo do programa que s\xc3\xa3o executados com maior freq\xc3\xbc\xc3\xaancia._NEWLINE_Entretanto, o mecanismo de execu\xc3\xa7\xc3\xa3o baseado em compiladores JIT pode causar um pequeno atraso no in\xc3\xadcio da execu\xc3\xa7\xc3\xa3o de uma aplica\xc3\xa7\xc3\xa3o, em fun\xc3\xa7\xc3\xa3o de ter que compilar o bytecode para c\xc3\xb3digo de m\xc3\xa1quina. Naturalmente, quanto mais otimiza\xc3\xa7\xc3\xb5es o compilador JIT realizar, mais r\xc3\xa1pida tender\xc3\xa1 a ser a execu\xc3\xa7\xc3\xa3o do programa alvo, por\xc3\xa9m maior ser\xc3\xa1 o atraso no in\xc3\xadcio da execu\xc3\xa7\xc3\xa3o. Por conta disso, os compiladores JIT mais bem elaborados normalmente realizam um balanceamento criterioso entre o tempo a ser gasto com a compila\xc3\xa7\xc3\xa3o e a qualidade de c\xc3\xb3digo que ele pretende gerar._NEWLINE_Dois exemplos de plataformas que se utilizam de compiladores JIT s\xc3\xa3o os ambientes.NET e Java. No caso do ambiente Java, o compilador de Java traduz o programa fonte para uma representa\xc3\xa7\xc3\xa3o intermedi\xc3\xa1ria (programa objeto) conhecida pelo termo bytecode. Posteriormente, o programa objeto ser\xc3\xa1 interpretado pela m\xc3\xa1quina virtual Java. No caso do ambiente.NET, a representa\xc3\xa7\xc3\xa3o intermedi\xc3\xa1ria \xc3\xa9 conhecida pelo termo Microsoft Intermediate Language (MSIL), que ser\xc3\xa1 interpretada pela m\xc3\xa1quina virtual do ambiente.NET, chamada Common Language Runtime.'