Java run-time system is an interpreter for bytecode. It is simply a highly efficient means of encoding a program for interpretation. It is much easier to allow Java programs to run in a wide variety of environments. Once the run-time package exists for a given system, the bytecode version of any Java program can run on it. Therefore, using bytecode to represent programs is the easiest way to create truly portable programs.
Pointers are inherently insecure and troublesome.
It is redundant to include them. Therefore, Java does not have global variables or global functions. By default, members of a class are accessible by other members of their class, derived classes, and by other members of their package. All class objects are instantiated in Java using the new operator. Therefore, all class objects are dynamically allocated.