Java é uma linguagem de programação Compilada ou Interpretada?

No passado eu usei o C ++ como uma linguagem de programação. Eu sei que o código escrito em C ++ passa por um processo de compilation até se tornar código de object “código de máquina”.

Eu gostaria de saber como o Java funciona a esse respeito. Como o código Java escrito pelo usuário é executado pelo computador?

As implementações Java geralmente usam um processo de compilation de duas etapas. O código-fonte Java é compilado em bytecode pelo compilador Java. O bytecode é executado por uma Java Virtual Machine (JVM). As JVMs modernas usam uma técnica chamada compilation Just-in-Time (JIT) para compilar o bytecode para instruções nativas entendidas pela CPU de hardware durante o tempo de execução.

Algumas implementações da JVM podem escolher interpretar o bytecode em vez de JIT compilá-lo para código de máquina e executá-lo diretamente. Enquanto isso ainda é considerado um “intérprete”, é bastante diferente dos intérpretes que lêem e executam o código fonte de alto nível (ou seja, neste caso, o código fonte Java não é interpretado diretamente, o bytecode, saída do compilador Java).

É tecnicamente possível compilar o Java até o código nativo antecipadamente e executar o binário resultante. Também é possível interpretar o código Java diretamente.

Para resumir, dependendo do ambiente de execução, o bytecode pode ser:

  • compilado antes do tempo e executado como código nativo (semelhante à maioria dos compiladores C ++)
  • compilado just-in-time e executado
  • interpretado
  • executado diretamente por um processador suportado (bytecode é o conjunto de instruções nativas de algumas CPUs)

Os termos “linguagem interpretada” ou “linguagem compilada” não fazem sentido, porque qualquer linguagem de programação pode ser interpretada e / ou compilada.

Quanto às implementações existentes de Java, a maioria envolve um passo de compilation para o bytecode, então eles envolvem compilation. O tempo de execução também pode carregar o bytecode dinamicamente, portanto, alguma forma de um intérprete de bytecode é sempre necessária. Esse interpretador pode ou não, por sua vez, usar a compilation para código nativo internamente.

Atualmente, a compilation parcial just-in-time é usada para muitos idiomas que já foram considerados “interpretados”, por exemplo, Javascript.

[ 1 ] A imagem abaixo explica tudo …

insira a descrição da imagem aqui

Código escrito em Java é:

  • Primeiro compilado para bytecode por um programa chamado javac como mostrado na seção esquerda da imagem acima;
  • Então, como mostrado na seção direita da imagem acima, [ 2 ] outro programa chamado java inicia o ambiente de execução Java e pode compilar e / ou interpretar o bytecode usando o Java Interpreter / JIT Compiler.

Quando o java interpreta o bytecode e quando é compilado? [ 3 ] O código do aplicativo é inicialmente interpretado, mas a JVM monitora quais seqüências de bytecode são executadas com frequência e as traduz para código de máquina para execução direta no hardware. Para o bytecode que é executado apenas algumas vezes, isso economiza o tempo de compilation e reduz a latência inicial; para bytecode executado com freqüência, a compilation JIT é usada para executar em alta velocidade, após uma fase inicial de interpretação lenta. Além disso, como um programa gasta a maior parte do tempo executando uma minoria de seu código, o tempo de compilation reduzido é significativo. Finalmente, durante a interpretação inicial do código, as statistics de execução podem ser coletadas antes da compilation, o que ajuda a otimizar a otimização.


Clique nos números sobrescritos na resposta para referências.

Java é compilado para bytecode, que então entra no Java VM, que o interpreta.

Tipo de ambos. Em primeiro lugar, o java compilado (alguns preferem dizer “traduzido”) ao bytecode, que então compilado, ou interpretado dependendo do humor do JIT.

Java é uma linguagem de programação compilada, mas em vez de compilar diretamente para código de máquina executável, ele compila para um formato binário intermediário chamado código de byte da JVM. O código de byte é então compilado e / ou interpretado para executar o programa.

Java faz compilation e interpretação,

Em Java, os programas não são compilados em arquivos executáveis ; eles são compilados no bytecode (como discutido anteriormente), que a JVM (Java Virtual Machine) interpreta / executa em tempo de execução. O código-fonte Java é compilado em bytecode quando usamos o compilador javac. O bytecode é salvo no disco com a extensão .class .

Quando o programa deve ser executado, o bytecode é convertido, o bytecode pode ser convertido, usando o compilador just-in-time (JIT). O resultado é um código de máquina que é então alimentado na memory e executado.

Javac é o compilador Java que compila o código Java em Bytecode. A JVM é a Java Virtual Machine que executa / interpreta / traduz o Bytecode no código de máquina nativo. Em Java, embora seja considerado como uma linguagem interpretada, ele pode usar a compilation JIT (Just-in-Time) quando o bytecode estiver na JVM. O compilador JIT lê os bytecodes em várias seções (ou na íntegra, raramente) e os compila dinamicamente em código de máquina para que o programa possa ser executado mais rapidamente e depois armazenado em cache e reutilizado posteriormente sem precisar ser recompilado. Portanto, a compilation JIT combina a velocidade do código compilado com a flexibilidade de interpretação.

Uma linguagem interpretada é um tipo de linguagem de programação para a qual a maioria de suas implementações executa instruções direta e livremente, sem antes compilar um programa em instruções em linguagem de máquina. O interpretador executa o programa diretamente, traduzindo cada instrução em uma sequência de uma ou mais sub-rotinas já compiladas em código de máquina.

Uma linguagem compilada é uma linguagem de programação cujas implementações são tipicamente compiladores (tradutores que geram código de máquina a partir do código-fonte), e não intérpretes (executores passo-a-passo do código fonte, onde nenhuma tradução pré-runtime ocorre)

Em implementações modernas de linguagem de programação, como em Java, é cada vez mais popular que uma plataforma forneça as duas opções.

Java é uma linguagem compilada em byte que tem como alvo uma plataforma chamada Java Virtual Machine, que é baseada em pilha e possui algumas implementações muito rápidas em muitas plataformas.

Cotação de: https://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster

Os desenvolvedores de aplicativos podem desenvolver o código do aplicativo em qualquer um dos vários sistemas operacionais disponíveis no mercado hoje. A linguagem Java é agnóstica neste estágio para o sistema operacional. O shiny código-fonte escrito pelo desenvolvedor do Java Application agora é compilado para o código Java Byte, que na terminologia Java é chamado de compilation do lado do cliente. Esta compilation para o código Java Byte é o que permite aos desenvolvedores Java ‘escreverem uma vez’. O código Java Byte pode ser executado em qualquer SO e servidor compatível, tornando o código fonte independente do OS / Server. Após a criação do código Java Byte, a interação entre o aplicativo Java e o SO / Servidor subjacente é mais íntima. A jornada continua – A estrutura de aplicativos corporativos executa esses códigos Java Byte em um ambiente de tempo de execução que é conhecido como Java Virtual Machine (JVM) ou Java Runtime Environment (JRE). A JVM tem laços estreitos com o SO e Hardware subjacente porque aproveita os resources oferecidos pelo sistema operacional e pelo servidor. O código Java Byte agora é compilado em um código executável de linguagem de máquina que é específico da plataforma. Isso é conhecido como compilation do lado do servidor.

Então eu diria que o Java é definitivamente uma linguagem compilada.