Overview

In this blog we will cover following points

  • What is JVM, JRE & JDK
  • Steps to run a java file

JVM (Java Virtual machine)

  • JVM is responsible to converting Byte code to the machine specific code.
  • JVM is also platform dependent and provides core java functions like memory management, garbage collection, security etc.

JRE (Java Runtime Environment)

  • Java Runtime Environment is the implementation of JVM, it provides platform to execute java programs.
  • JRE consists of JVM and java binaries and other classes to execute any program successfully.
  • JRE doesn’t contain any development tools like java compiler, debugger etc.
  • If you want to execute any java program, you should have JRE installed but we don’t need JDK for running any java program.
  • We can also say JRE is for running the java programs.

JDK (Java Development Kit)

  • Java Development Kit is the core component of Java Environment.
  • It includes the Java Runtime Environment (JRE), an interpreter/loader (Java), a compiler (javac), an archiver (jar), a documentation generator (Javadoc) and other tools needed in Java development.
Summary

JRE = JVM + Lib Classes
JDK = JRE + Dev Tools

What are steps to run a Java file

Compile
  • sample.java is compiles to sample.class as Bytecode using javac command.
  • eg: javac sample.java
Runtime

eg: java sample

JVM is responsible for following 3 steps

  • Loading
  • Linking
  • Initialization
Loading
  • The Class loader reads the .class file, generate the corresponding binary data and save it in method area.
  • For each .class file, JVM stores following information in method area.
  • Fully qualified name of the loaded class and its immediate parent class.
  • Whether .class file is related to Class or Interface or Enum
  • Modifier, Variables and Method information etc.
  • After loading .class file, JVM creates an object of type Class to represent this file in the heap memory
Linking (Byte Code Verifier)
  • Verification : It ensures the correctness of .class file i.e. it check whether this file is properly formatted and generated by valid compiler or not. If verification fails, we get run-time exception java.lang.VerifyError
  • Preparation : JVM allocates memory for class variables and initializing the memory to default values.
Initialization
  • In this phase, all static variables are assigned with their values defined in the code and static block(if any).
  • This is executed from top to bottom in a class and from parent to child in class hierarchy.
  • In general there are three class loaders :
    1. Bootstrap class loader : Every JVM implementation must have a bootstrap class loader, capable of loading trusted classes. It loads core java API classes present in JAVA_HOME/jre/lib directory.
    2. Extension class loader : It is child of bootstrap class loader. It loads the classes present in the extensions directories JAVA_HOME/jre/lib/ext(Extension path) or any other directory specified by the java.ext.dirs system property.
    3. System/Application class loader : It is child of extension class loader. It is responsible to load classes from application class path. It internally uses Environment Variable which mapped to java.class.path.
Categories: JAVA

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.