Runs Java bytecode (like the engine):
Loads .class (bytecode)
Verifies bytecode (security)
Executes code
Manages memory (Heap, Stack)
Runs Garbage Collector
Handles threads
Have a predefined calling method:
public static void main(string[] args)
// can overload main method
// predefined is to call this
// JVM calls it based on class name (so must be static)
Platform-specific
// But bytecode is the same.