JVM Architecture PDF
JVM Architecture PDF
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
152 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
JVM Architecture
1) Virtual Machine
2) Types of Virtual Machines
3) Basic JVM Architecture
5) Types of ClassLoaders
Boot Strap ClassLoader
Extension ClassLoader
Application ClassLoader
7) Customized ClassLoader
Need of Customized ClassLoader
Pseudo Code to Define Customized
ClassLoader
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
153 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Virtual Machine:
It Provides Several Logical Systems on the Same Computer with Strong Isolation from Each
Other.
Examples:
1) KVM (Kernel Based Virtual Machine) for Linux Systems
2) VMware (Virtual Machine ware)
3) Xen
4) Cloud Computing
The main advantage of Hard-ware based Virtual Machines is for effective utilization of hard-
ware resources.
These Virtual Machines Acts as Runtime Engines to Run a Particular Programming Language
Application.
Examples:
1) JVM Acts as Runtime Engine to Run Java Applications
2) PVM (Parrot VM) Acts as Runtime Engine to Run Scripting Languages Like PERL.
3) CLR (Common Language Runtime) Acts as Runtime Engine to Run .Net Based
Applications.
JVM
JVM is the Part of JRE.
JVM is Responsible to Load and Run Java Applications.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
154 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
ClassLoader
Class Files
Sub System
Various Memory
Areads of JVMe Data
Native
Native Native
Execution
Method Method
Engine
Interface Libraries
Libraries
OS
1) Loading:
Loading Means Reading Class Files and Store Corresponding Binary Data in Method Area.
For Each Class File JVM will Store the following Information in Method Area.
1) Fully Qualified Name of the Loaded Class OR Interface ORenum.
2) Fully Qualified Name of its Immediate Parent Class.
3) Whether .class File is related to Class OR Interface OR enum.
4) The Modifiers Information
5) Variables OR Fields Information
6) Methods Information
7) Constant Pool Information and so on.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
155 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
After loading .class File Immediately JVM will Creates an Object of the Type class Class to
Represent Class Level Binary Information on the Heap Memory.
Student.class Student.class
Information classClass Object for
Student.class
Used
By
Programmer
The Class Object can be used by Programmer to get Class Level Information Like Fully
Qualified Name of the Class, Parent Name, Methods and Variables Information Etc.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
156 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
In the Above Example by using Student class Class Object we can get its Methods and Variable
Information.
Note: For Every loaded .class file Only One Class Object will be Created, even though we are
using Class Multiple Times in Our Application.
class Test2 {
public static void main(String args[]) {
Student s1 = new Student();
Student s2 = new Student();
Class c1 = s1.getClass();
Class c2 = s2.getClass();
2) Linking:
Linking Consists of 3 Activities
1) Verification
2) Preparation
3) Resolution
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
157 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Verification:
It is the Process of ensuring that Binary Representation of a Class is Structurally Correct
OR Not.
That is JVM will Check whether .class File generated by Valid Compiler OR Not.i.ewhether
.class File is Properly Formatted OR Not.
Internally Byte Code Verifier which is Part of ClassLoader Sub System is Responsible for
this Activity.
If Verification Fails then we will get Runtime Exception Saying java.lang.VerifyError.
Preparation:
In this Phase JVM will Allocate Memory for the Class Level Static Variables and
Assign DefaultValues (But Not Original Values).
Resolution:
It is the Process of Replaced Symbolic References used by the Loaded Type with Original
References.
Symbolic References are Resolved into Direct References by searching through Method
Area to Locate the Referenced Entity.
class Test {
public static void main(String[] args) { Test.class
String s = new String("Durga"); String.class
Student s1 = new Student(); Student.class
} Object.class
}
3) Initialization:
In this Phase All Static Variables will be assigned with Original Values and Static Blocks will
be executed from fromtop to bottom and from Parent to Child.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
158 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Linking
Verification
Resolution
Note: While Loading, Linking and Initialization if any Error Occurs then we will get
Runtime Exception Saying java.lang.LinkageError. Of course VerifyError is child class of
LinkageError only.
Types of ClassLoaders:
1) BootstrapClassLoader OR PrimordialClassLoader
2) ExtensionClassLoader
3) ApplicationClassLoader OR SystemClassLoader
BootstrapClassLoader
Location:
JDK
JRE
Lib
*.jar
(rt.jar)
This Location is Called BootstrapClassPath.
That is BootstrapClassLoader is Responsible to Load Classes fromBootstrapClassPath.
BootstrapClassLoader is by Default Available with the JVM.
It is implemented in Native Languages Like C and C++.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
159 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Extension ClassLoader:
This ClassLoader is implemented in Java and the corresponding .class File Name is
sun.misc.Launcher$ExtClassLoader.class
Bootstrap ClassLoader
Extension ClassLoader
Application ClassLoader
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
160 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Bootstrap ClassLoader
ExtensionClassLoader
class Test {
public static void main(String[] args) {
System.out.println(String.class.getClassLoader());
System.out.println(Student.class.getClassLoader());
System.out.println(Test.class.getClassLoader());
}
}
For String Class: From Bootstrap Class Path by Bootstrap ClassLoader Output is null
For Student Class: From Extension Class Path by Extension ClassLoader Output is
sun.misc.Launcher$extClassLoader@1234
Note: Assume that Student.class Present in Both Extension Class Path and Application Class
Path and Test.class Present in Only in Application Class Path.
Note:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
161 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Bootstrap ClassLoader is Not Java Object. Hence we are getting null in the 1st Case but
Extension ClassLoader and Application ClassLoader are Java Objects and Hence we get
Proper Output in remaining 2 Cases.
[email protected]_of_Hashcode
ClassLoader Subsystem will give Highest Priority for Bootstrap Class Path and then
Extension Class followed by Application Class Path.
Default ClassLoader will load .class Files Only Once Eventhough we are using
Multiple Times that Class in Our Program.
After loading .class File if it is modified Outside, then Default ClassLoaderwon't Load
Updated Version of Class File on Fly (Dynamically). Because .class File already there in
Method Area.
We can Resolve this Problem by defining Our Own Customized ClassLoader.
The Main Advantage of Customized ClassLoader is we can Control Class loading
Mechanism Based on Our Requirement.
For Example we can Load Class File Separately Every Time. So that Updated Version
Available to Our Program.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
162 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
This Class Act as Base Class for designing Our Own Customized ClassLoaders.
Hence Every Customized ClassLoader Class should extendsjava.lang.ClassLoader either
Directly OR Indirectly.
Whole Loading and Running a Java Program JVM required Memory to Store Several
Things Like Byte Code, Objects, Variables, Etc.
Total JVM Memory organized in the following 5 Categories:
1) Method Area
2) Heap Area OR Heap Memory
3) Java Stacks Area
4) PC Registers Area
5) Native Method Stacks Area
1) Method Area:
Total Class Level Binary Information including Static Variables Stored in Method
Area.
5) Class Data
Method Area
2) Heap Area :
Object Data
Heap Area
A Java Application can Communicate with the JVM by using Runtime Object.
Runtime Class Present in java.lang Package and it is a Singleton Class.
We can Create Runtime Object by using
Runtime r = Runtime.getRuntime();
Once we got Runtime Object we can Call the following Methods on that Object.
2) totalMemory(): Returns Number of Bytes of Total (Initial) Memory allocated to the Heap.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
164 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Heap Memory Size is Finite, Based on Our Requirement we can IncreaseORDecrease Heap
Size.
The Default Heap Size is 64.
We can Use the following Flags with Java Command.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
165 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
3) Stack Memory:
t1 t2 tn
--------------------
-
Stack Frame
Runtime Runtime Runtime
Stack Stack Stack
Stack Memory
Stack Frame
Local Variable Array
Operand Stack
Frame Data
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
166 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
long double
int Object float
0 1 2 3 4 5 6
Local Variable Array
Operand Stack:
Program Before Storing After i-load 0 After i-load 1 After i-add After i-store
i – load 0 0 100 0 100 0 100 0 100 0 100
i – load 1 Local Variable
1 80 1 80 1 80 1 80 1 80
i – add Array
i - store 2 2 2 2 2 180
Frame Data:
Frame Data contains All Symbolic References (Constant Pool) related to that
Method.
It also contains a Reference to Exception Table which Provides corresponding catch
Block Information in the Case of Exceptions.
For Every Thread a Separate PC Register will be Created at the Time of Thread
Creation.
PC Registers contains Address of Current executing Instruction.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
167 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
For Every Thread JVM will Create a Separate Native Method Stack.
All Native Method Calls invoked by the Thread will be stored in the corresponding
Native Method Stack.
Note:
Method Area, Heap Area and Stack Area are considered as Major Memory Areas with
Respect to Programmers Point of View.
Method Area and Heap Area are for JVM. Whereas Stack Area, PC Registers Area and
Native Method Stack Area are for Thread. That is
One Separate Heap for Every JVM
One Separate Method Area for Every JVM
One Separate Stack for Every Thread
One Separate PC Register for Every Thread
One Separate Native Method Stack for Every Thread
Static Variables will be stored in Method Area whereas Instance Variables will be stored in
Heap Area and Local Variables will be stored in Stack Area.
Execution Engine:
This is the Central Component of JVM.
Execution Engine is Responsible to Execute Java Class Files.
Execution Engine contains 2 Components for executing Java Classes.
Interpreter
JIT Compiler
Interpreter:
It is Responsible to Read Byte Code and Interpret (Convert) into Machine Code (Native
Code) and Execute that Machine Code Line by Line.
The Problem with Interpreter is it Interpreters Every Time Even the Same Method
Multiple Times. Which Reduces Performance of the System.
To Overcome this Problem SUN People Introduced JIT Compilers in 1.1 Version.
JIT Compiler:
and Executes it Instead of interpreting Once Again. So that Performance of the System will
be Improved.
The Threshold Count Value varied from JVM to JVM.
Some Advanced JIT Compilers will Re-compile generated Native Code if Count Reaches
Threshold Value Second Time, So that More optimized Machine Code will be
generated.
Profiler which is the Part of JIT Compiler is Responsible to IdentifY HOT SPOTS.
Note:
Execution Engine
JIT Compiler
Intermediate Code
Generator
Profiler
Code Optimizer
Garbage
Interpreter Collector
Target Code
Generator
Target Machine
Code
JNI Acts as Bridge (Mediator) between Java Method Calls and corresponding Native
Libraries.
Eg:hashCode()
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
169 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Note: Whenever we are executing a Java Class if JVM Unable to Find Valid Magic Number
then we get RuntimeException Saying ClassFormatError: incompatible magic value.
Note:
Higher Version JVM can Always Run Lower Version Class Files But Lower Version JVM
can’t Run Class Files generated by Higher Version Compiler.
Whenever we are trying to Execute Higher Version Compiler generated Class File with
Lower Version JVM we will get RuntimeException Saying
java.lang.UnsupportedClassVersionError: Employee (Unsupported major.minor version
51.0)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
170 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
5) Access_Flash:It Shows the Modifiers which are declared for the Current Class OR
Interface.
6) this_class:It Represents the Name of the Class OR Interface defined by Class File.
7) super_class:It Represents the Name of the Super Class Represented by Class File.
this_class: Test
super_class: java.lang.Object
Test.class
9) interface[]:It Represents the Names of Interfaces which are implemented by Current Class
File.
11 )fields[]:It Provides Names of All Fields Present in the Current Class File.
13 )methods[]:It Returns the Name of the Method Present in the Current Class File.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
171 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Execution Engine
I JIT Compiler
N
Intermediate Code
T Generator Java Native
E Profiler Native Method
R Interface Libraries
Code Optimizer
P Garbage
Collector
R Target Code
E Generator
T
E Target Machine
R Code
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
172 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com