Search courses, chapters, or pages...
Compare the jobs of the JDK, JVM, and standard library so you can tell which part compiles code, which part runs it, and which part supplies ready-made Java classes.
Use what you learned in the previous lesson to solve real-world problems.
Trace what a .java file contributes to execution: human-readable source code that declares classes, methods, and imports for the compiler to check and translate.
Check what you understood with a short quiz.
Reason through what javac produces when it compiles: .class files containing JVM bytecode and metadata, not operating-system-specific machine code.
Recognize why the same compiled .class file can run on different systems: each platform has its own JVM that understands the same bytecode format.
Follow what happens when the java launcher starts a program: it creates a JVM process, names a starting class, and asks the JVM to begin there.
Identify the main method as the program’s entry point and reason through why its signature lets the JVM call it before your own objects exist.
Trace how the JVM finds code beyond the starting class, using the classpath, module path, JAR files, and the built-in runtime image to locate classes as needed.
Step through the JVM’s safety checks before code runs: class loading, bytecode verification, linking, and class initialization prepare classes for execution.
Compare interpretation and just-in-time compilation so you can explain how the JVM starts running bytecode quickly and later optimizes frequently used code.
Map the main runtime memory areas a Java program uses, including the call stack for active method calls and the heap for objects shared across calls.
Reason through garbage collection as a JVM service that reclaims heap objects your program can no longer reach, reducing manual memory management.
Recognize how compiled programs are packaged for sharing: JAR files bundle class files and resources, and a manifest can name the class to launch.
Review this chapter with practice based on your mistakes.