The JVM is the engine that executes Java byte code. Note that the JRE is not exactly the same as the JVM, despite what ram kumar says. The JRE is the JVM plus supporting libraries etc. that are necessary to run Java programs. You could see the JVM as the engine, and the JRE as the complete car (including the engine) that you need to get anywhere.
The JDK is a set of tools that you need when you want to develop your own Java programs.
Normal users (non-programmers) need the JRE to be able to run Java programs on their computers.
Programmers need the JDK to be able to compile their own Java programs.