Nothing Special   »   [go: up one dir, main page]

Introduction To Java: Java Virtual Machine (JVM)

Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

Introduction to Java

JAVA was developed by Sun Microsystems Inc in 1991, later acquired by Oracle Corporation. It was
developed by James Gosling and Patrick Naughton. It is a simple programming language. Writing,
compiling, and debugging a program is easy in java. It helps to create modular programs and reusable
code.

Java Virtual Machine (JVM)

This is generally referred as JVM. Before, we discuss about JVM lets see the phases of program
execution. Phases are as follows: we write the program, then we compile the program and at last we run
the program.

1) Writing of the program is of course done by java programmer like you and me.
2) Compilation of program is done by javac compiler, javac is the primary java compiler included in
java development kit (JDK). It takes java program as input and generates java bytecode as output.
3) In third phase, JVM executes the bytecode generated by compiler. This is called program run phase.

So, now that we understood that the primary function of JVM is to execute the bytecode produced by
compiler. Each operating system has different JVM, however the output they produce after
execution of bytecode is same across all operating systems. That is why we call java as platform
independent language.

Bytecode

As discussed above, javac compiler of JDK compiles the java source code into bytecode so that it can
be executed by JVM. The bytecode is saved in a .class file by compiler.

Java Development Kit(JDK)

While explaining JVM and bytecode, I have used the term JDK. Let us discuss about it. As the name
suggests this is complete java development kit that includes JRE (Java Runtime Environment),
compilers and various tools like JavaDoc, Java debugger etc. To create, compile and run Java program
you would need JDK installed on your computer.

Java Runtime Environment(JRE)

JRE is a part of JDK which means that JDK includes JRE. When you have JRE installed on your system,
you can run a java program however you won’t be able to compile it. JRE includes JVM, browser
plugins and applets support. When you only need to run a java program on your computer, you would
only need JRE.
Main Features of JAVA

A. Platform Independent Language.

Compiler(javac) converts source code (.java file) to the byte code(.class file). As mentioned above,
JVM executes the bytecode produced by compiler. This byte code can run on any platform such as
Windows, Linux, Mac OS etc. Which means a program that is compiled on windows can run on Linux
and vice-versa. Each operating system has different JVM, however the output they produce after
execution of bytecode is same across all operating systems. That is why we call java as platform
independent language.

B. Object-Oriented language

Object oriented programming is a way of organizing programs as collection of objects, each of which
represents an instance of a class. The 4 main concepts of Object-Oriented programming are:

1. Abstraction
2. Encapsulation
3. Inheritance
4. Polymorphism

C. Simple

Java is considered as one of simple language because it does not have complex features like Operator
overloading, Multiple inheritance, pointers and Explicit memory allocation.

D. Robust Language

Robust means reliable. Java programming language is developed in a way that puts a lot of emphasis
on early checking for possible errors, that’s why java compiler can detect errors that are not easy to
detect in other programming languages. The main features of java that makes it robust are garbage
collection, Exception Handling, and memory allocation.

E. Secure

We do not have pointers and we cannot access out of bound arrays (you get
ArrayIndexOutOfBoundsException if you try to do so) in java. That is why several security flaws like
stack corruption or buffer overflow are impossible to exploit in Java.

F. Java is distributed.

Using java programming language, we can create distributed applications. RMI(Remote Method
Invocation) and EJB(Enterprise Java Beans) are used for creating distributed applications in java. In
simple words: The java programs can be distributed on more than one system that are connected to each
other using internet connection. Objects on one JVM (java virtual machine) can execute procedures on
a remote JVM.
G. Multithreading

Java supports multithreading. Multithreading is a Java feature that allows concurrent execution of two
or more parts of a program for maximum utilisation of CPU.

H. Portable

Java code that is written on one machine can run on another machine. The platform independent byte
code can be carried to any platform for execution that makes java code portable.
Java Virtual Machine (JVM), Difference JDK, JRE & JVM – Core Java

Java is a high-level programming language. A program written in high level language cannot be run on
any machine directly. First, it needs to be translated into that machine language. The javac
compiler does this thing, it takes java program (.java file containing source code) and translates it into
machine code (referred as byte code or .class file).

Java Virtual Machine (JVM) is a virtual machine that resides in the real machine (your computer) and
the machine language for JVM is byte code. This makes it easier for compiler as it must generate byte
code for JVM rather than different machine code for each type of machine. JVM executes the byte code
generated by compiler and produce output. JVM is the one that makes java platform independent.

So, now we understood that the primary function of JVM is to execute the byte code produced by
compiler. Each operating system has different JVM, however the output they produce after execution
of byte code is same across all operating systems. Which means that the byte code generated on
Windows can be run on Mac OS and vice versa. That is why we call java as platform independent
language. The same thing can be seen in the diagram below:

So, to summarise everything: The Java Virtual machine (JVM) is the virtual machine that runs on actual
machine (your computer) and executes Java byte code. The JVM does not understand Java source code,
that is why we need to have javac compiler that compiles *.java files to obtain *.class files that contain
the byte codes understood by the JVM. JVM makes java portable (write once, run anywhere). Each
operating system has different JVM, however the output they produce after execution of byte code is
same across all operating systems.
JVM Architecture

Let us see how JVM works:


Class Loader: The class loader reads the .class file and save the byte code in the method area.

Method Area: There is only one method area in a JVM which is shared among all the classes. This holds
the class level information of each .class file.

Heap: Heap is a part of JVM memory where objects are allocated. JVM creates a Class object for each
.class file.

Stack: Stack is a also a part of JVM memory but unlike Heap, it is used for storing temporary variables.

PC Registers: This keeps the track of which instruction has been executed and which one is going to be
executed. Since instructions are executed by threads, each thread has a separate PC register.

Native Method stack: A native method can access the runtime data areas of the virtual machine.

Native Method interface: It enables java code to call or be called by native applications. Native
applications are programs that are specific to the hardware and OS of a system.

Garbage collection: A class instance is explicitly created by the java code and after use it is
automatically destroyed by garbage collection for memory management.

JVM Vs JRE Vs JDK

JRE: JRE is the environment within which the java virtual machine runs. JRE contains Java virtual
Machine (JVM), class libraries, and other files excluding development tools such as compiler and
debugger. Which means you can run the code in JRE, but you can’t develop and compile the code in
JRE.

JVM: As we discussed above, JVM runs the program by using class, libraries and files provided by
JRE.

JDK: JDK is a superset of JRE, it contains everything that JRE has along with development tools such
as compiler, debugger etc.
How to Compile and Run your First Java Program

Simple Java Program:

public class FirstJavaProgram {


public static void main(String[] args){
System.out.println("This is my first program in java");
}//End of main
}//End of FirstJavaProgram Class
Output: This is my first program in java

How to compile and run the above program

Prerequisite: You need to have java installed on your system.

Step 1: Open a text editor, like Notepad on windows and TextEdit on Mac. Copy the above program
and paste it in the text editor.

Step 2: Save the file as FirstJavaProgram.java. You may be wondering why we have named the file as
FirstJavaProgram, the thing is that we should always name the file same as the public class name. In
our program, the public class name is FirstJavaProgram, that is why our file name should
be FirstJavaProgram.java.

Step 3: In this step, we will compile the program. For this, open command prompt (cmd) on Windows,
if you are Mac OS then open Terminal. To compile the program, type the following command and hit
enter.

javac FirstJavaProgram.java

You may get this error when you try to compile the program: “javac’ is not recognized as an internal or
external command, operable program or batch file“. This error occurs when the java path is not set in
your system. If you get this error then you first need to set the path before compilation.

Set Path in Windows:


Open command prompt (cmd), go to the place where you have installed java on your system and
locate the bin directory, copy the complete path and write it in the command like this.

set path=C:\Program Files\Java\jdk1.8.0_121\bin


Note: Your jdk version may be different. Since I have java version 1.8.0_121 installed on my system, I
mentioned the same while setting up the path.

Set Path in Mac OS X


Open Terminal, type the following command and hit return.
export JAVA_HOME=/Library/Java/Home
Type the following command on terminal to confirm the path.

echo $JAVA_HOME
That’s it.

The steps above are for setting up the path temporary which means when you close the command prompt
or terminal, the path settings will be lost and you will have to set the path again next time you use it. I
will share the permanent path setup guide in the coming tutorial.

Step 4: After compilation the .java file gets translated into the .class file(byte code). Now we can run
the program. To run the program, type the following command and hit enter:

java FirstJavaProgram
Note that you should not append the .java extension to the file name while running the program.

Closer look to the First Java Program

Now that we have understood how to run a java program, let have a closer look at the program we have
written above.

public class FirstJavaProgram {


This is the first line of our java program. Every java application must have at least one class definition
that consists of class keyword followed by class name. When I say keyword, it means that it should not
be changed, we should use it as it is. However, the class name can be anything.

I have made the class public by using public access modifier, I will cover access modifier in a separate
post, all you need to know now that a java file can have any number of classes but it can have only one
public class and the file name should be same as public class name.

public static void main(String[] args) {


This is our next line in the program, lets break it down to understand it:
public: This makes the main method public that means that we can call the method from outside the
class.

static: We do not need to create object for static methods to run. They can run itself.

void: It does not return anything.

main: It is the method name. This is the entry point method from which the JVM can run your program.

(String[] args): Used for command line arguments that are passed as strings.
System.out.println("This is my first program in java");
This method prints the contents inside the double quotes into the console and inserts a newline after.

You might also like