JVM Architecture: Execution Engine in JVM
Hello readers! In theprevious article of JVM series, developers learned about the Virtual machine’sClassLoader andRuntime Data Areas components. This tutorial will help developers to correctly understand theExecution Engine in JVM.
1. Introduction
Before moving further let’s take a look at the Java Virtual Machine and its basic characteristics.
1.1 What is Java Virtual Machine (JVM)?
Java Virtual Machine (JVM) is an abstract virtual machine that resides on your computer and provides a runtime environment for the Java bytecode to get executed. JVM is available for many hardware and software platforms but few Java developers know that theJava Runtime Environment (JRE) is the implementation of theJava Virtual Machine (JVM). JVM analyze the bytecode, interprets it, and execute the same bytecode to display the output.
The basic function of JVM is to execute the compiled.class files (i.e. the bytecode) and generate an output. Donote, each operating system has a different JVM, but the generated bytecode output is the same across all operating systems. This means that the bytecode generated on Windows OS can also run on Linux OS and vice-versa, thus making Java as a platform independent language.

1.1.1 What JVM does?
Java Virtual machine performs the following operations:
- Loading of the required of the required
.classand jar files - Assigning references and verification of the code
- Execution of the code
- Provides a runtime environment for the Java bytecode
1.1.2 JVM Internal Architecture
The following diagram shows the key internal components of Java Virtual Machine that conforms to the JVM specification.

Theexecution engine component shown in Fig. 2 is each explained below.
1.2 Execution Engine in JVM
This component executes the bytecode which is assigned to the runtime data areas through the classloader. This bytecode is read as instructions and each bytecode instruction consists of a 1-byteOpCode and an addition operand. Donote, that the Java bytecode is written in a human-readable form, thus the execution engine must change the bytecode to a language that can be easily executed by the machine in the Java Virtual Machine. The execution engine has three major sub-components i.e.
- Interpreter: This component reads the bytecode instructions and executes them in a sequential manner. The component runs the application from the command line by accepting a filename argument. The following prototype command can be used:
java <_compiled_file_name_without_extension_>
Doremember, the compiled class (i.e.
.classfile) loaded by the virtual machine interpreter must contain amain()method that takes the below form.public static void main(String[] args) { // Sample code here} - JIT (Just In Time) Compiler: This component counterbalance the Interpreter’s disadvantage of slow execution and improves the performance. JIT compiler compiles the similar part of the bytecode at the same time and thus reduces the total time needed for compilation. The compiler in this component refers to a translator which converts the JVM instruction set to the OS-specific instruction set.
- Oracle uses a compiler known asHotspot Compiler which searches for hotspots that require compiling with the highest priority through profiling and then compiles the hotspot to the native code. In here, if the bytecode of a compiled method is no longer required, the hotspot virtual machine removes the native code from the cache and runs in the interpreter mode
- Garbage Collection: This component is a part of execution engine which frees up the memory by collecting and removing the unreferenced objects

1.3 How to Compile and Execute a Java class?
This section will demonstrate thecompilation andexecution of a Java class. Let’s understand this process with the help of sample code snippet.
1.3.1 Creating a Java file
Open the operating system command prompt and we will use the ‘notepad’ to create a simple Java class. The following Java command can be used.
> notepad _sample_file_name_with_extension_
The command gives the below output.

1.3.2 Writing the sample Java Code
As shown in Fig. 4, the command will open anotepad and developers can add the sample code to theWelcome.java file that displays a dummy output. The sample code is shown in Fig. 5 and will display agreetings message onsuccessful execution.

1.3.3 Compiling the Java class
After saving the code inWelcome.java file, developers will need tocompile it. This compilation will produce theWelcome.class file which in turn will generate a.class file. To compile the file, the following Java command can be used.
> javac _Java_file_name_with_extension_
The command gives the below output.
1.3.4 Executing the Java class
Now, developers will need toexecute the generatedWelcome.class file to display the output. Toexecute the file, the following Java command can be used.
> java _Compiled_file_name_with_extension_
The command gives the below output.
1.4 JVM vs. JRE vs. JDK
Before we go ahead and complete this tutorial, let take a look at the three important keywords of Java programming. Many developers fail to get the difference between them.
- Java Virtual Machine (JVM): JVM is a virtual machine which provides a runtime environment for executing the Java bytecode
- Java Runtime Environment (JRE): JRE is an environment within which the JVM runs and has class libraries and other files that Java Virtual Machine uses at the time of execution. In other words, JRE = Java Virtual Machine (JVM) + Libraries to run the application
- Java Development Kit (JDK): JDK is the parent set of the JRE and has everything that JRE contains along with the development tools such as a compiler, debugger etc. In other words, JDK = Java Runtime Environment (JRE) + Development tools
Here is the pictorial representation of JVM, JRE, and JDK.

That’s all for this post. Happy Learning!
2. Conclusion
In this tutorial, developers had an overview of the execution engine component in JVM. You can download the sample code in theDownloads section.
3. Download the Source Code
This was an overview tutorial of Execution engine in Java Virtual Machine (JVM).
You can download the source code of this tutorial here:Compilation_and_Execution

Thank you!
We will contact you soon.





