Compilação Just-in-Time

Introdução

Compilação just-in-time (sob demanda), também conhecida como compilação dinâmica, é uma técnica de interpretação usada para aumentar o desempenho na execução de programas. Esta técnica permite que ambientes de execução (interpretadores e/ou máquinas virtuais) compilem código em tempo de execução para código de máquina real, aumentando a performance por traduzir blocos de código, no lugar de avaliar e executar linha por linha (interpretação de código).

Além das vantagens frente à interpretação, a compilação just-in-time também apresenta vantagens frente à compilação em tempo de desenvolvimento, uma vez que o código compilado dinâmicamente pode levar em consideração as características da máquina real na qual ele está rodando, aumentando assim a sua performance.

Sendo assim, a compilação dinâmica é uma estratégia que combina as vantagens da interpretação e as vantagens da compilação em tempo de desenvolvimento.

Visão Geral

Interpretação de código é a técnica na qual um código fonte é traduzido no momento em que é executado. Está técnica tem um desempenho inferior à execução de programas compilados (uma vez que a avaliação de cada instrução é feita na hora), mas permitiu que outros conceitos e tecnologias surgissem, como máquinas virtuais e linguagens portáveis (Java, .NET, etc).

A compilação just-in-time permite que tecnologias de máquinas virtuais e/ou ambientes de execução tenham uma forma de aumentar a velocidade de execução, fazendo com que, quando o programa esteja rodando (ou prestes à), o compilador just-in-time compile uma parte do código (ou talvez todo ele) para código de máquina nativo e o execute.

Em comparação à compilação em tempo de desenvolvimento, a compilação just-in-time pode apresentar uma série de vantagens, uma vez que é possível fazer otimizações para as diversas plataformas nas quais o código a ser executado pode rodar.

Com isso, a técnica da compilação just-in-time tem como objetivo manter as vantagens de ambos os mundos: a portabilidade da interpretação e o desempenho da compilação em tempo de desenvolvimento. Apesar disso, a compilação just-in-time apresenta desvantagens. A principal delas é o atraso no início da execução do código, tempo necessário para a compilaçao de algumas instruções. Sendo assim, a maioria dos ambientes de execução que utilizam a técnica da compilação dinâmica ponderam quanto à quais partes são necessárias serem compiladas, reduzindo ao máximo o atraso no início da execução.

Histórico

Compilação dinâmica foi pela primeira vez, na década de 80, pelo VisualWorks, uma das implementações do ambiente e da linguagem de programação Smalltalk.

Logo após, a linguagem Self, da Sun, usou essas técnicas extensivamente e, apesar de ter sido abandonada, sua pesquisa foi levada em consideração na criação da linguagem Java, que atualmente utilza compilação just-in-time na maioria das implementações de máquinasi virtuais java.

Atualmente, outra plataforma que utiliza compilação just-in-tme é o ambiente .NET, da Microsoft. Programas compilados pra esse ambiente são transformados em uma representação intermediária conhecida como Microsoft Intermediate Language (MSIL), que é, por sua vez, interpretada (possivelmente passando por compilação just-in-time) pelo ambiente de execução conhecido como Common Language Runtime (CLR).

Referências

Just-in-time compilation. Disponível em: < http://en.wikipedia.org/wiki/Just-in-time_compilation >. Último acesso em 16 out. 2008.

CONDIT, Jeremy. Expert Topic: just-in-time compilation. Disponível em: < http://www.cs.berkeley.edu/~jcondit/cs265/expert.html >. Último acesso em 15 out. 2008.

Compilação MSIL para código nativo. Disponível em: < http://msdn.microsoft.com/pt-br/library/ht8ecch6.aspx >. Último acesso em 16 out. 2008.

LOURENÇO, Pedro Castelo Branco. On the Fly Code: aproximando-se da “solução perfeita” no desenvolvimento de produtos. Disponível em: < http://www.linhadecodigo.com.br/Artigo.aspx?id=397 >. Último acesso em 13 out. 2008.

Equipe

Heron Sampaio da Cruz
Igor Edington Anselmo Santos
Marcus de Oliveira Souza

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License