- JVM (Java Virtual Machine)
- JRE (Java Runtime Environment)
- JDK (Java Development Kit)
- Java JIT (Just-In-Time)
JVM (Java Virtual Machine) ⤴
JVM understand Java bytecode. Java Virtual Machine interprets the bytecode into the machine code depending upon the underlying operating system and hardware combination. It is responsible for all things like garbage collection, array bounds checking, etc … JVM is platform dependent.
The JVM is called “virtual” because it provides a machine interface that does not depend on the underlying operating system and machine hardware architecture. This independence from hardware and operating system is a cornerstone of the write-once run-anywhere value of Java programs.
JRE (Java Runtime Environment) ⤴
The Java Runtime Environment (JRE) provides the libraries, the Java Virtual Machine, and other components to run applets and applications written in the Java programming language.
JRE does not contain tools and utilities such as compilers or debuggers for developing applets and applications.
JDK (Java Development Kit) ⤴
The JDK also called Java Development Kit is a superset of the JRE, and contains everything that is in the JRE, plus tools such as the compilers and debuggers necessary for developing applets and applications.
Java JIT (Just-In-Time) ⤴
In Java you have to write and compile a program only once. The Java on any platform will interpret the compiled bytecode into instructions understandable by the particular processor.
However Java Virtual Machine handles only one bytecode instruction at a time that makes execution slow. But using the Java Just-In-Time compiler at the particular system platform compiles the bytecode into the particular system code. After the code has been (re-)compiled by the JIT compiler, it will usually run more quickly on the computer.
The Just-In-Time compiler comes with JVM and is used optionally. It compiles the bytecode into platform specific executable code that is immediately executed.