Introduction
JVM рдХрд╛ full form Java Virtual Machine рд╣реИред JVM Java programming language рдХрд╛ рдмрд╣реБрдд important part рд╣реИред Java program directly machine code рдореЗрдВ convert рдирд╣реАрдВ рд╣реЛрддрд╛ред Java compiler рдкрд╣рд▓реЗ Java source code рдХреЛ bytecode рдореЗрдВ convert рдХрд░рддрд╛ рд╣реИред рдЗрд╕ bytecode рдХреЛ JVM execute рдХрд░рддрд╛ рд╣реИред
JVM рдХреА рд╡рдЬрд╣ рд╕реЗ Java platform-independent language рдмрдирддреА рд╣реИред Java рдХрд╛ famous concept Write Once, Run Anywhere JVM рдФрд░ bytecode рдХреА help рд╕реЗ possible рд╣реЛрддрд╛ рд╣реИред
Simple Definition
JVM is a virtual machine that executes Java bytecode and provides a runtime environment for Java programs.
Hindi Meaning
JVM рдПрдХ virtual machine рд╣реИ рдЬреЛ Java bytecode рдХреЛ execute рдХрд░рддреА рд╣реИ рдФрд░ Java program рдХреЛ run рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП runtime environment provide рдХрд░рддреА рд╣реИред
JVM рдХрд╛ Full Form
JVM = Java Virtual Machine
JVM Java Runtime Environment рдХрд╛ part рд╣реЛрддреА рд╣реИред рдЬрдм рд╣рдо Java program run рдХрд░рддреЗ рд╣реИрдВ, рддреЛ JVM bytecode рдХреЛ machine code рдореЗрдВ convert рдХрд░рдХреЗ program execute рдХрд░рддреА рд╣реИред
JVM рдХреА Need рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИ?
Java program рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ operating systems рдкрд░ run рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JVM рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рд╣рд░ operating system рдХреЗ рд▓рд┐рдП JVM рдЕрд▓рдЧ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди Java bytecode same рд░рд╣рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП Java program рдХреЛ рдПрдХ рдмрд╛рд░ compile рдХрд░рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ platforms рдкрд░ run рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Important Line
JVM makes Java platform-independent by executing bytecode on different platforms.
Java Program Execution Process
Java program execution рдореЗрдВ mainly рддреАрди steps рд╣реЛрддреЗ рд╣реИрдВ:
Java Source Code (.java)
тЖУ
Java Compiler (javac)
тЖУ
Bytecode (.class)
тЖУ
JVM
тЖУ
Machine Code
тЖУ
Output
Explanation
Programmer Java code .java file рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред Java compiler рдЙрд╕ code рдХреЛ bytecode рдореЗрдВ convert рдХрд░рддрд╛ рд╣реИред Bytecode .class file рдореЗрдВ store рд╣реЛрддрд╛ рд╣реИред JVM рдЗрд╕ bytecode рдХреЛ read рдХрд░рдХреЗ machine code рдореЗрдВ convert рдХрд░рддреА рд╣реИ рдФрд░ output show рдХрд░рддреА рд╣реИред
Bytecode рдХреНрдпрд╛ рд╣реИ?
Bytecode рдПрдХ intermediate code рд╣реЛрддрд╛ рд╣реИ рдЬреЛ Java compiler рджреНрд╡рд╛рд░рд╛ generate рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рди рддреЛ рдкреВрд░реА рддрд░рд╣ source code рд╣реЛрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдкреВрд░реА рддрд░рд╣ machine codeред Bytecode JVM рджреНрд╡рд╛рд░рд╛ execute рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Simple Definition
Bytecode is an intermediate code generated by Java compiler and executed by JVM.
Example
рдЬрдм рд╣рдо Hello.java file рдХреЛ compile рдХрд░рддреЗ рд╣реИрдВ:
javac Hello.java
рддреЛ compiler Hello.class file generate рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА .class file рдореЗрдВ bytecode рд╣реЛрддрд╛ рд╣реИред
JVM рдФрд░ Platform Independence
C рдФрд░ C++ programs generally machine code рдореЗрдВ compile рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ machine code рдХрд┐рд╕реА specific platform рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП C рдФрд░ C++ platform-dependent languages рд╣реИрдВред
Java program bytecode рдореЗрдВ compile рд╣реЛрддрд╛ рд╣реИред рдпрд╣ bytecode рдХрд┐рд╕реА рднреА operating system рдХреА JVM рдкрд░ run рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП Java platform-independent language рд╣реИред
Example Flow
Same Java Bytecode
тЖУ
Windows JVM тЖТ Run on Windows
Linux JVM тЖТ Run on Linux
Mac JVM тЖТ Run on Mac
рдЗрд╕рдореЗрдВ bytecode same рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди JVM platform рдХреЗ according рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддреА рд╣реИред
JVM рдХрд╛ Working
JVM Java bytecode рдХреЛ load, verify рдФрд░ execute рдХрд░рддреА рд╣реИред JVM program рдХреЛ memory рджреЗрддреА рд╣реИ рдФрд░ program run рдХрд░рддреЗ рд╕рдордп errors рдХреЛ handle рдХрд░рдиреЗ рдореЗрдВ help рдХрд░рддреА рд╣реИред
JVM mainly рдпреЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ:
- Bytecode рдХреЛ load рдХрд░рдирд╛
- Bytecode рдХреЛ verify рдХрд░рдирд╛
- Bytecode рдХреЛ execute рдХрд░рдирд╛
- Memory management рдХрд░рдирд╛
- Garbage collection рдХрд░рдирд╛
- Security provide рдХрд░рдирд╛
JVM Architecture
JVM architecture Java program execution рдХреЛ manage рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ main parts рд╣реИрдВ:
- Class Loader
- Bytecode Verifier
- Runtime Data Area
- Execution Engine
- Garbage Collector
Class Loader
Class Loader JVM рдХрд╛ part рд╣реИ рдЬреЛ .class file рдХреЛ memory рдореЗрдВ load рдХрд░рддрд╛ рд╣реИред рдЬрдм Java program run рд╣реЛрддрд╛ рд╣реИ, рддреЛ JVM рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ required class files рдХреЛ load рдХрд░рддреА рд╣реИред
Work of Class Loader
- Class file рдХреЛ load рдХрд░рдирд╛
- Required classes рдХреЛ memory рдореЗрдВ рд░рдЦрдирд╛
- Program execution рдХреЗ рд▓рд┐рдП classes prepare рдХрд░рдирд╛
Bytecode Verifier
Bytecode Verifier bytecode рдХреЛ check рдХрд░рддрд╛ рд╣реИред рдпрд╣ verify рдХрд░рддрд╛ рд╣реИ рдХрд┐ bytecode safe рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдЧрд░ bytecode рдореЗрдВ рдХреЛрдИ security problem рдпрд╛ invalid code рд╣реЛрддрд╛ рд╣реИ, рддреЛ JVM рдЙрд╕реЗ execute рдирд╣реАрдВ рдХрд░рддреАред
Work of Bytecode Verifier
- Bytecode рдХреЛ check рдХрд░рдирд╛
- Security problem detect рдХрд░рдирд╛
- Invalid bytecode рдХреЛ reject рдХрд░рдирд╛
- Java program рдХреЛ safe рдмрдирд╛рдирд╛
Runtime Data Area
Runtime Data Area JVM рдХреА memory area рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдБ program run рд╣реЛрдиреЗ рдХреЗ рд╕рдордп data store рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ variables, objects, method data рдФрд░ execution information store рд╣реЛрддреА рд╣реИред
Runtime Data Area рдореЗрдВ Mainly рд╣реЛрддреЗ рд╣реИрдВ:
- Method Area
- Heap Area
- Stack Area
- Program Counter Register
- Native Method Stack
Method Area
Method Area рдореЗрдВ class level information store рд╣реЛрддреА рд╣реИред рдЬреИрд╕реЗ class name, method name, static variables рдФрд░ constantsред
Heap Area
Heap Area рдореЗрдВ objects store рд╣реЛрддреЗ рд╣реИрдВред Java рдореЗрдВ рдЬрдм object create рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ heap memory рдореЗрдВ store рд╣реЛрддрд╛ рд╣реИред
Example
Student s = new Student();
рдЗрд╕ statement рдореЗрдВ new Student() object heap memory рдореЗрдВ create рд╣реЛрддрд╛ рд╣реИред
Stack Area
Stack Area рдореЗрдВ method calls рдФрд░ local variables store рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рдХреЛрдИ method call рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП stack рдореЗрдВ memory create рд╣реЛрддреА рд╣реИред Method complete рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╡рд╣ memory remove рд╣реЛ рдЬрд╛рддреА рд╣реИред
Program Counter Register
Program Counter Register current instruction рдХрд╛ address store рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ JVM рдЕрднреА рдХреМрди рд╕реА instruction execute рдХрд░ рд░рд╣реА рд╣реИред
Native Method Stack
Native Method Stack рдЙрди methods рдХреЗ рд▓рд┐рдП use рд╣реЛрддрд╛ рд╣реИ рдЬреЛ Java рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рджреВрд╕рд░реА language рдЬреИрд╕реЗ C рдпрд╛ C++ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реЛрддреЗ рд╣реИрдВред
Execution Engine
Execution Engine bytecode рдХреЛ execute рдХрд░рддрд╛ рд╣реИред рдпрд╣ bytecode рдХреЛ machine code рдореЗрдВ convert рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ computer рдЙрд╕реЗ рд╕рдордЭ рд╕рдХреЗред
Execution Engine рдореЗрдВ mainly рджреЛ parts рд╣реЛрддреЗ рд╣реИрдВ:
- Interpreter
- JIT Compiler
Interpreter
Interpreter bytecode рдХреЛ line by line execute рдХрд░рддрд╛ рд╣реИред рдпрд╣ simple рд╣реЛрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди repeated execution рдореЗрдВ slow рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
JIT Compiler
JIT рдХрд╛ full form Just-In-Time Compiler рд╣реИред JIT compiler frequently used bytecode рдХреЛ machine code рдореЗрдВ convert рдХрд░рдХреЗ performance improve рдХрд░рддрд╛ рд╣реИред
Important Line
JIT compiler improves the performance of Java programs.
Garbage Collector
Garbage Collector JVM рдХрд╛ part рд╣реИ рдЬреЛ unused objects рдХреЛ memory рд╕реЗ remove рдХрд░рддрд╛ рд╣реИред Java рдореЗрдВ memory management automatic рд╣реЛрддрд╛ рд╣реИред Programmer рдХреЛ manually memory free рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреАред
Simple Definition
Garbage Collector automatically removes unused objects from memory.
Advantage
Garbage Collector memory leak рдХреЛ reduce рдХрд░рддрд╛ рд╣реИ рдФрд░ Java program рдХреЛ more reliable рдмрдирд╛рддрд╛ рд╣реИред
JVM, JRE рдФрд░ JDK рдореЗрдВ Difference
| JVM | JRE | JDK |
|---|---|---|
| JVM bytecode execute рдХрд░рддреА рд╣реИред | JRE Java program run рдХрд░рдиреЗ рдХрд╛ environment рджреЗрддрд╛ рд╣реИред | JDK Java program develop рдХрд░рдиреЗ рдХреЗ tools рджреЗрддрд╛ рд╣реИред |
| JVM Java рдХрд╛ runtime engine рд╣реИред | JRE рдореЗрдВ JVM рдФрд░ libraries рд╣реЛрддреА рд╣реИрдВред | JDK рдореЗрдВ JRE, compiler рдФрд░ development tools рд╣реЛрддреЗ рд╣реИрдВред |
| JVM program run рдХрд░рддреА рд╣реИред | JRE рдХреЗрд╡рд▓ program run рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред | JDK program develop рдФрд░ run рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред |
Simple Meaning
- JVM: Java program execute рдХрд░рддреА рд╣реИред
- JRE: Java program run рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП environment рджреЗрддрд╛ рд╣реИред
- JDK: Java program develop рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП complete kit рд╣реИред
Simple Java Program and JVM
class HelloJVM {
public static void main(String[] args) {
System.out.println("JVM executes Java bytecode");
}
}
Output
JVM executes Java bytecode
Execution
HelloJVM.java
тЖУ javac
HelloJVM.class
тЖУ JVM
Output
Example: Object Stored in Heap Memory
class Student {
String name = "Rahul";
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.name);
}
}
Output
Rahul
Explanation
рдЗрд╕ program рдореЗрдВ Student s = new Student(); statement object create рдХрд░рддрд╛ рд╣реИред рдпрд╣ object heap memory рдореЗрдВ store рд╣реЛрддрд╛ рд╣реИред JVM memory management рдХреЛ handle рдХрд░рддреА рд╣реИред
Advantages of JVM
- JVM Java рдХреЛ platform-independent рдмрдирд╛рддреА рд╣реИред
- JVM bytecode execute рдХрд░рддреА рд╣реИред
- JVM security provide рдХрд░рддреА рд╣реИред
- JVM memory management рдХрд░рддреА рд╣реИред
- JVM garbage collection support рдХрд░рддреА рд╣реИред
- JVM runtime environment provide рдХрд░рддреА рд╣реИред
- JVM Java program рдХреА performance improve рдХрд░рдиреЗ рдореЗрдВ help рдХрд░рддреА рд╣реИред
Common Misunderstanding
Java Platform Independent рд╣реИ, JVM рдирд╣реАрдВ
Java bytecode platform-independent рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди JVM platform-dependent рд╣реЛрддреА рд╣реИред Windows рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ JVM, Linux рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ JVM рдФрд░ Mac рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ JVM рд╣реЛрддреА рд╣реИред
Important Point
Java is platform-independent, but JVM is platform-dependent.
Exam-Oriented Short Answer
Q. What is JVM? Explain its role in Java.
JVM рдХрд╛ full form Java Virtual Machine рд╣реИред JVM Java bytecode рдХреЛ execute рдХрд░рддреА рд╣реИ рдФрд░ Java program рдХреЛ run рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП runtime environment provide рдХрд░рддреА рд╣реИред Java compiler source code рдХреЛ bytecode рдореЗрдВ convert рдХрд░рддрд╛ рд╣реИ рдФрд░ JVM рдЙрд╕ bytecode рдХреЛ machine code рдореЗрдВ convert рдХрд░рдХреЗ execute рдХрд░рддреА рд╣реИред JVM рдХреА help рд╕реЗ Java platform-independent рдмрдирддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ same bytecode рдЕрд▓рдЧ-рдЕрд▓рдЧ platforms рдХреА JVM рдкрд░ run рд╣реЛ рд╕рдХрддрд╛ рд╣реИред JVM memory management, garbage collection рдФрд░ security рднреА provide рдХрд░рддреА рд╣реИред
Important Points to Remember
- JVM рдХрд╛ full form Java Virtual Machine рд╣реИред
- JVM Java bytecode рдХреЛ execute рдХрд░рддреА рд╣реИред
- JVM Java Runtime Environment рдХрд╛ part рд╣реИред
- Java compiler
.javafile рдХреЛ.classfile рдореЗрдВ convert рдХрд░рддрд╛ рд╣реИред .classfile рдореЗрдВ bytecode рд╣реЛрддрд╛ рд╣реИред- JVM bytecode рдХреЛ machine code рдореЗрдВ convert рдХрд░рддреА рд╣реИред
- JVM Java рдХреЛ platform-independent рдмрдирд╛рддреА рд╣реИред
- Java platform-independent рд╣реИ, рд▓реЗрдХрд┐рди JVM platform-dependent рд╣реИред
- JVM garbage collection рдФрд░ memory management рдХрд░рддреА рд╣реИред
- JIT compiler Java program рдХреА performance improve рдХрд░рддрд╛ рд╣реИред
Practice Questions
Short Answer Questions
- JVM рдХрд╛ full form рдХреНрдпрд╛ рд╣реИ?
- JVM рдХреНрдпрд╛ рд╣реИ?
- Bytecode рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
- JVM Java рдХреЛ platform-independent рдХреИрд╕реЗ рдмрдирд╛рддреА рд╣реИ?
- JVM рдФрд░ JDK рдореЗрдВ рдЕрдВрддрд░ рд▓рд┐рдЦрд┐рдПред
- JVM рдФрд░ JRE рдореЗрдВ рдЕрдВрддрд░ рд▓рд┐рдЦрд┐рдПред
- Garbage Collector рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
- JIT compiler рдХрд╛ рдХреНрдпрд╛ рдХрд╛рдо рд╣реИ?
Long Answer Question
JVM рдХреНрдпрд╛ рд╣реИ? JVM рдХреА working рдФрд░ architecture рдХреЛ diagram рдХреЗ рд╕рд╛рде explain рдХреАрдЬрд┐рдПред
Homework Program
рдПрдХ Java program рд▓рд┐рдЦрд┐рдП рдЬреЛ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ output print рдХрд░реЗ:
Java Virtual Machine
JVM executes bytecode
Java is platform independent
Hint
class JVMDemo {
public static void main(String[] args) {
System.out.println("Java Virtual Machine");
System.out.println("JVM executes bytecode");
System.out.println("Java is platform independent");
}
}