Java Virtual Machine also known as JVM, is a cornerstone of Java platform. It is important platform to execute your Java applications.
The first prototype implementation of JVM was created at Sun Microsystems. It was emulated in software hosted by a handled device called Personal Digital Assistant(PDA). Oracle’s current implementations emulate the JVM on mobile, desktop and server devices.
Java Virtual Machine does not assume any particular implementation technology, host hardware, or host operating system.
The Java Virtual Machine knows nothing of the Java programming language. It knows only of a particular binary format – the class file format. A class file contains Java Virtual Machine instructions (or bytecodes) and a symbol table, as well as other ancillary information.
For the sake of security, the Java Virtual Machine imposes strong syntactic and structural constraints on the code in a class file. However, any language with functionality that can be expressed in terms of a valid class file can be hosted by the Java Virtual Machine.
Java Virtual Machine is a machine-independent and implementors of other languages can turn to the Java Virtual Machine as a delivery vehicle for their languages.
To implement the Java Virtual Machine correctly, you only need to read the class file format and correctly perform the operations specified therein. Implementation details that are not part of the Java Virtual Machine’s specification would unnecessarily constrain the creativity of implementors.
For example, the memory layout of run-time data areas, the garbage-collection algorithm used, and any internal optimization of the Java Virtual Machine instructions (for example, translating them into machine code) are left to the discretion of the implementor.
Java Virtual Machine operates on two kinds of types: primitive types and reference types. There are, correspondingly, two kinds of values that can be stored in variables, passed as arguments, returned by methods, and operated upon: primitive values and reference values.
The Java Virtual Machine contains explicit support for objects. An object is either a dynamically allocated class instance or an array. A reference to an object is considered to have Java Virtual Machine type reference. Values of type reference can be thought of as pointers to objects. More than one reference to an object may exist. Objects are always operated on, passed, and tested via values of type reference.
The primitive data types supported by the Java Virtual Machine are the numeric types, the boolean type, and the returnAddress type.
The numeric types consist of the integral types and the floating-point types.
The values of the boolean type encode the truth values true and false, and the default value is false.
The returnAddress type is used by the Java Virtual Machine’s jsr, ret, and jsr_w instructions (§jsr, §ret, §jsr_w). The values of the returnAddress type are pointers to the opcodes of Java Virtual Machine instructions. Unlike the numeric primitive types, the returnAddress type does not correspond to any Java programming language type and cannot be modified by the running program.
The Java Virtual Machine does not mandate any particular internal structure for objects.
I have taken as a gist of the original documentation from Oracle Docs.