To make the java-bytecode, and the Java software in general, portable, James Gosling and his team invented a JVM which is a virtual machine capable of running your bytecode and translate that series of statements in actual machine code.
Each Operative System and platform has its own JVM but you can run the same bytecode in each one of them.
You can see the JVM like a sandbox, your OS can't see the process related to your java application directly because this happens internally, in the JVM itself and the process related to the JVM is taking care of managing your memory and your resources.
the JRE are basically the collection of libraries that comes with a standard versione of the Java platform, the word "Java" is used to indicate both the language and a generic Java platform, to be a little bit more specific about the platform you can use labels that are part of the Java world like J2SE, J2EE and J2ME.
- J2SE is a java profile for the desktop
- J2EE is a java profile made for the enterprise
- J2ME is a java profile made for mobile and low end devices
but this definitions are not really needed because with the evolution of the hardware something can change, for example on the Android platform you find a J2SE implementation of the JAVA platform rather than a J2ME wich was far more popular on mobile in the Symbian era.
The JDK is maded by the JRE + all the things that you need to develop with java, so the JDK comes with a
javac compiler, a doc utility like
javadoc and just everything you need to get started creating your own java applications.