The JDK contains the JRE plus development tools like the javac compiler and java runtime. The JRE contains libraries and files used by the JVM at runtime. The JVM provides the runtime environment to execute bytecode and allows Java to be platform independent, though the JVM itself is operating system dependent.