JVM: It is an abbreviation for Java Virtual Machine, it is an abstract machine (a software) which provides the runtime environment in which java bytecode can be executed. It is a specification. JVMs are available for many hardware and software platforms (so JVM is platform dependent/architecture dependent).
JRE: It stands for Java Runtime Environment. It is the implementation of JVM.
JDK: It is an acronym for Java Development Kit. It is basically a complete set of development tools necessary for developing & executing Java programs. It contains JRE in itself.