Header Ads

O que é compilação Just-In-Time (JIT)?

Compilação Just-In-Time, ou JIT, é uma técnica usada por intérpretes de tempo de execução para linguagens como JavaScript, C # e Java para aproximar as velocidades de execução do desempenho nativo oferecido por linguagens binárias pré-compiladas como C ++.

Compiladores x intérpretes

Os computadores não sabem executar linguagens de programação de alto nível como C ++, pelo menos não diretamente. Para traduzir o código legível por humanos em algo que sua CPU possa executar, ele deve ser convertido. Um computador geralmente faz isso por meio de um dos dois métodos — compilação ou interpretação.

A compilação envolve a execução de um compilador, um programa que pega o código-fonte e o converte em código de máquina binário, antes de executar o aplicativo. A compilação ocorre no computador do dev &’ antes de ser empacotada e enviada. A maioria dos executáveis ​​que você baixa são compilados em algum nível para rodar em sua máquina, e o código compilado é geralmente muito rápido porque o compilador pode fazer otimizações para sua máquina em particular.

No entanto, os compiladores têm algumas desvantagens. Os programas devem ser compilados para conjuntos de instruções de CPU específicos (como x86-64 ou ARM). Além disso, mesmo os sistemas operacionais que compartilham conjuntos de instruções (como Windows e Linux, que são executados em CPUs Intel) devem ter programas compilados separadamente devido às muitas diferenças em como eles funcionam.

Isso significa que, para algo como JavaScript, que deve ser enviado pela Internet para clientes conectados, não pode ser compilado com antecedência, porque o cliente pode estar executando qualquer combinação de conjunto de instruções e sistema operacional.

Publicidade

Os intérpretes têm uma abordagem diferente. Um intérprete é basicamente um robô de software que pega o código-fonte de um programa como um script JavaScript ou Python e trata da execução da execução em tempo de execução. Basicamente, ele atua como uma camada intermediária entre o código-fonte e a máquina, onde um compilador o traduziria diretamente.

Isso tem o grande benefício de não exigir que o programa seja compilado para nenhuma máquina em particular; contanto que a máquina possa executar o interpretador Python, ela pode executar qualquer script Python.

O que a compilação JIT faz?

Infelizmente para os intérpretes, eles são lentos. Um verdadeiro intérprete deve traduzir e lidar com cada instrução, essencialmente fazendo um trabalho de compilador para cada execução. Isso é uma grande sobrecarga, então, na realidade, a maioria dos intérpretes como o mecanismo V8 JavaScript, a Java Virtual Machine (JVM) e o Common Language Runtime do . NET fazem uso da compilação Just-In-Time para acelerar o intérprete.

A compilação Just-In-Time é essencialmente um compilador que procrastina e apenas compila o código para cada função sempre que necessário. Sempre que você chama uma função, se o compilador JIT ainda não a viu, ele irá compilar essa função (aplicando quaisquer otimizações para a máquina em que está sendo executado) e executá-la. Na próxima vez que você chamar a função, ela já terá o código de máquina em mãos, então só precisa procurá-lo no cache.

Just-In-Time refere-se ao fato de que o intérprete não precisa compilar o aplicativo inteiro de uma vez. Certamente poderia, mas para um aplicativo grande isso levaria a tempos de inicialização muito altos. É melhor para o desempenho fazer a compilação apenas quando for necessário (ou seja, na hora certa).

A compilação JIT tem um hit de desempenho?

JIT é literalmente apenas uma melhoria de desempenho em relação aos intérpretes regulares, então, em comparação a não fazer nada, é muito mais rápido. No entanto, compilar o código não é particularmente rápido, então, obviamente, fazer a compilação em tempo de execução tem um impacto no desempenho em comparação com se tivesse sido compilado diretamente para bytecode de antemão.

Publicidade

No entanto, como a compilação JIT geralmente só precisa ser executada na primeira vez que uma função é chamada, as funções comumente usadas só terão um impacto de desempenho na primeira chamada. Você pode testar isso em C # com StopWatches — eles captam o ruído de fundo do . NET “ ” incluindo o tempo gasto na compilação JIT na primeira execução de uma função.

A principal desvantagem dos aplicativos compilados JIT é um alto tempo de inicialização a frio, já que milhares de funções chamadas na inicialização devem ser compiladas logo no início. Alguns aplicativos da Web ASP. NET podem levar mais de um minuto para inicializar, em parte devido ao alto estresse no compilador JIT no início.

Nenhum comentário