This document summarizes a lecture on the Java Virtual Machine (JVM). It discusses the Java architecture including the Java programming language, JVM, and Java API. It uses the JVM as a case study of an intermediate program representation. The JVM execution engine can use byte code interpretation, just-in-time compilation to machine code, or adaptive optimization. The JVM has shared data areas including the heap for objects and arrays, method area for class metadata, and stacks for threads.