Runs Java bytecode (like the engine):
Loads and verify .class (bytecode) (security)
Executes code
Manages memory (Heap, Stack)
Runs Garbage Collector
Handles threads
Have a predefined calling the class 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.
JRE = JVM + core libraries (java.lang, java.util, java.io)