The execution engine does the following:
- Instantiates objects in the heap area
- Initializes static and instance fields, using initializers written by programmers
- Adds/removes frames to/from Java stack
- Updates the PC register with the next instruction to execute
- Maintains the native method stack
- Keeps counts of method calls and compiles popular ones
- Finalizes objects
- Runs garbage collection
- Terminates the application