Las implementaciones Java generalmente utilizan un proceso de compilación de dos pasos. El código fuente de Java se compila en bytecode por el compilador de Java. El bytecode es ejecutado por una Máquina Virtual Java (JVM). Las JVM modernas utilizan una técnica llamada Just-in-Time (JIT) compilation para compilar el código de bytes a las instrucciones nativas entendidas por la CPU del hardware sobre la marcha en tiempo de ejecución.
Algunas implementaciones de JVM pueden optar por interpretar el bytecode en lugar de JIT compilarlo en código máquina, y ejecutarlo directamente. Aunque esto todavía se considera un "intérprete", es bastante diferente de los intérpretes que leen y ejecutan el código fuente de alto nivel (es decir, en este caso, el código fuente de Java no se interpreta directamente, el bytecode, el resultado del compilador Java).
Es técnicamente posible compilar Java en código nativo antes de tiempo y ejecutar el binario resultante. También es posible interpretar el código de Java directamente.
En resumen, dependiendo del entorno de ejecución, el código de bytes puede ser:
- compilado antes de tiempo y ejecutarse como código nativo (similar a la mayoría de los compiladores de C++)
- compilado justo a tiempo y ejecutados
- interpretarse
- directamente ejecutado por un procesador compatible (bytecode es el conjunto de instrucciones nativas de algunas CPUs)
C++ podría interpretarse. Hay algunos intérpretes de C por ahí. –