Boa tarde a todos.
Voce já ouviu falar de “Compilação Just-in-Time”.
Antes de falar desse processo, vou abordar passo a passo dos processos desde a criação até a execução de um programa em Java:
Um programa em Java, em geral passa por cinco fases, isto mesmo, cinco fases que são: edição, compilação, carga, verificação e execução.
-
Edição: A edição consiste na criação do código fonte, que pode ser através de um simples bloco de notas, ou pelas ricas ferramentas IDEs de desenvolvimento (NetBeans, Eclipse e etc.).
-
Compilação: O compilador Javac transforma o seu código fonte (arquivos “.java") em código binário chamado de Bytecodes, transformando os arquivos em ".class”.
-
Carga: Todo programa deve ser carregado em memória antes de ser executado. Este processo conhecido como carga, consiste em carregar os arquivos “.class” para a memória RAM pelo “Carregador de Classes”.
-
Verificação: Este processo é feito pelo “Verificador de Bytecodes”, que faz justamente isto, verificar se os Bytecodes contidos nos arquivos “*.class” não violem as regras de restrições do Java.
-
Execução: Ou Interpretação fica por conta do JVM (Java Virtual Machine) que interpreta os bytecodes, depois de verificados, e executa em uma máquina virtual que simula um computador, mas oculta o Sistema Operacional e o Hardware subjacentes dos programas que interagem com o JVM, a qual chamamos de camada de abstração, fazendo com que seja portável em qualquer sistema operacional.
Na realidade, nos primórdios da linguagem Java, nos tempos de Bloco de Notas, o processo consistia exatamente naquilo que o Sulito disse, ou seja, Javac para compilar e Java para executar, entretanto para se executar o programa Java, o compilador Java ou o Java.exe, como preferem chamar, executa a JVM e inicia os processos dos ítens 3, 4 e 5. Devido a todo esse processo, mais tarde foram que criaram os pacotes JDK, onde o JVM passou a se chamar JRE (Java RunTime Enviroment - Ambiente de Execução Java), trazendo consigo os compiladores Java e Javac.
Além disso, no ínicio da linguagem Java, o JVMs tornaram-se muito lentos, isto pois os mesmos interpretavam cada bytecode por vez, além é claro de criar a máquina virtual, isto levou a criação de um compilador chamado Just-In-Time, que em geral utilizam uma combinação de interpretação e a compilação que leva o seu nome (JIT Just-In-Time), nesse processo, a JVM analisa os bytecodes à medida que eles são interpretados, procurando “Hot Spots (Pontos Ativos)”, que são partes dos bytecodes executados com frequência. Para estas partes, o compilador JIT, conhecido também como compilador Java HotSpot traduz os bytecodes para linguagem de máquina subjacente. Quando a JVM encontra novamente essas partes compiladas, o código em linguagem de máquina é executado mais rápido, isto faz com que os programas Java passem por duas fases de compilação.
Esta é a razão que eu costumo chamar tanto o Javac.exe quanto o Java.exe, de compiladores, eis que o Java.exe e parte integrante do JVM