The Java programming language is a high-level programming language. A program developed in a high-level language cannot be directly executed on any machine. It should first be translated into that specific machine language for its execution.
This is where the need for JDK JRE and JVM comes into the picture. These are essential parts for developing and executing Java applications on your system.
Although JDK JRE and JVM are interrelated, there is a wide range of differences between the three. First, let’s understand the meaning of all three terms and their implications individually, then we shall discuss their differences on various bases.
What is JDK?
JDK is an abbreviation for Java Development Kit. It is a software development kit used for Java applications and applet development. JDK is platform-dependent, so separate installers are needed for Windows, Unix, and Mac operating systems.
It is responsible for code execution and consists of both JVM and JRE. The Java Development Kit (JDK) includes all of the tools, executables, and binaries needed to compile, debug, and run Java programs. This consists of a compiler, an archiver, a debugger, Java Runtime Environment (JRE), and other Development tools.
JDK consists of both JRE and JVM, as shown in the figure below.
Here are the components of JDK:
- JDK and JRE: The JDK allows programmers to write core Java programs that can be executed by the JRE, which includes the JVM and class libraries.
- Class Libraries: It is a collection of dynamically loadable libraries that Java programmers can use during runtime.
- Compilers: Javac is the primary compiler in Java. It is a Java application that accepts developers’ text files and compiles them into Java class files. It is the most frequent type of output given by a compiler that contains Java byte code.
- Debuggers: This helps developers in testing and debugging Java programs.
- JavaDoc: It is documentation made by Sun Microsystems for Java. It can be used in HTML files to generate API documentation from the source program.
What is JRE?
JRE stands for Java Runtime Environment, and it is the implementation of JVM, i.e. the specifications used in JVM are implemented, and an environment for code execution is created. JRE is primarily made up of Java binaries and other classes used to execute programs the same way JVM does.
Along with Java binaries, JRE also includes:
- Deployment technologies.
- User interfaces for interacting with the code being executed.
- Base libraries for different functionalities and JVM.
It does not contain any tools like a debugger, compiler, etc., for Java development. Developers can simply run source code with JRE, but they cannot develop or compile Java programs.
JRE includes a JVM instance, library classes, and development tools. When you write and compile Java code, the compiler produces a class file containing byte code.
Here are the components of JRE:
- Class loaders: This helps in loading various classes that are necessary for running Java programs. JVM mainly uses three class loaders: the system class loader, bootstrap class loader and extensions class loader.
- Byte code verifier: It verifies the bytecode so that the code does not disturb the interpreter.
- Interpreter: The interpreter reads the code line by line after the classes get loaded, and the code gets verified.
- Run-time: Run-time is a system mainly used in programs to tell the time period of a particular program when it is running.
- Hardware: After the Java native code is completed, it is executed on a specific hardware platform. In this way, Java programs run in the Java Runtime Environment.
What is JVM?
JVM is an acronym for Java virtual machine, which is a specification that offers a runtime environment in which Java byte code can be executed. The JVM is in charge of translating Bytecode to machine-specific code.
It can also implement programs written in other languages and compiled into Java bytecode. It cannot be downloaded and installed separately. JRE must be installed before JVM can be installed.
JVM provides a platform-independent way for executing Java source code. JVM includes a JIT (Just-in-Time) compiler that converts Java source code to low-level machine language at runtime. As a result, it performs better than a regular application.
JVM contains numerous tools, libraries, and frameworks. It is mainly responsible for the following tasks: Loads code, verifies code, executes code, and provides a runtime environment.
Here are the components of JVM:
- ClassLoader – It is a subsystem mainly used for loading the class files. It performs three primary functions, i.e. Loading, Linking, and Initialising.
- Method Area- It stores a class structure like metadata, Java methods, and constant runtime pool.
- Heap Memory- All the objects, instance variables, and arrays are stored in a heap. This memory is shared across numerous threads.
- JVM language Stacks- It stores local variables and their partial results. Every thread has its own JVM language stack, which is generated simultaneously as the thread. When a method is called, a new frame is generated, and it is deleted once the method has been called.
- PC Registers- The address of the presently executing Java virtual machine instruction is stored in PC registers. Each thread in Java has its own set of PC registers.
- Native Method Stacks- The instructions of native code are stored in native method stacks, which are dependent on the native library. It utilises native heaps or any form of the stack to allocate memory.
- Execution Engine- It is a sort of software used to test hardware, software, or whole systems. The test execution engine never stores any data about the product being tested.
- Native Method interface- It is a programming framework. It allows libraries and native programmes to call Java code executing in a JVM.
- Native Method Libraries- It is a collection of Native Libraries (C, C++) that the Execution Engine requires.
Relation between JDK vs JRE vs JVM
JDK is a superset of JRE, containing all of the tools for developing applets and applications included in JRE, such as compilers and debuggers. The Java Runtime Environment (JRE) contains libraries, the Java Virtual Machine (JVM), and other components for running Java applets and applications.
JVM is the key element of both JDK and JRE. Whatever Java program you run using JRE or JDK goes into JVM, and it is responsible for executing the program line by line. Hence it is also known as an interpreter. The figure below shows the relationship between the three.
JDK JRE & JVM
After reading the introduction mentioned above, you must now go through the head-to-head comparison between JDK, JRE, and JVM through the table given below.
|Java Development Kit (JDK) is a software development kit used to develop Java applications.||Java Runtime Environment (JRE) is a software package that provides Java Virtual Machine (JVM), class libraries and other components to run applications in Java.||Java Virtual Machine (JVM) is an abstract machine that provides an environment for the execution of Java ByteCodes.|
|JDK contains tools for developing, monitoring and debugging java codes.||JRE contains class libraries and other supporting files required by JVM for executing Java programs.||JVM does not include any software development tools.|
|It is platform-dependent, i.e. different platforms require different JDK.||It is also platform-dependent as JDK.||It is platform-independent.|
|It is primarily used for creating Java programs that JRE and JVM can execute.||It is mainly responsible for creating an environment for the execution of Java programs.||JVM specifies all the implementations and is responsible for providing them to JRE.|
|JDK = JRE + Development tools||JRE = JVM + Class libraries||JVM = provides a runtime environment.|
Now that you have a clear knowledge about them and an in-depth understanding of the comparison between JDK, JRE and JVM, you can also try practicing some problems related to them on Codestudio.
Frequently Asked Questions
JDK is responsible for code execution and contains both JVM and JRE. JRE (Java Runtime Environment) is the JVM implementation. It is defined as a software package that includes Java class libraries, a Java Virtual Machine (JVM), and other components for running Java programs. Java Virtual Machine (JVM) is an abstract machine that provides an environment for executing Java Byte Codes.
The Java Runtime Environment (JRE) is the environment in which the virtual machine operates. The container is JRE, while the substance is JVM. JRE contains JVM, class libraries, and other supporting files. There are no development tools included, such as a compiler or a debugger.
In layman’s terms, Java Development Kit (JDK) is a collection of JRE and Software Development Tools. Java Run-Time Environment (JRE) is a collection of Java Virtual Machine and Run-Time Class libraries.
When you have a JDK, you don’t separately require JRE. If you open the JDK folder, you’ll notice that it has a JRE folder identical to the JRE folder you had before. As all been said, JDK contains JRE.
Java plays a vital role in application development these days, and hence JDK, JRE, and JVM will always be used to execute Java programs. Java Development Kit (JDK) is a software development kit used to develop Java applications.
Java Runtime Environment (JRE) is a software package that provides Java Virtual Machine (JVM), class libraries and other components to run applications in Java. In contrast, Java Virtual Machine (JVM) is an abstract machine that provides an environment for the execution of Java ByteCodes.
You can also check out our courses on Java Programming Language and learn more about it under the guidance of our mentors.
By Mehak Goel