Java это сам язык(набор спецификаций и рекомендаций).
JRE (java runtime enviroment) это среда исполнения языка java, т.е. jvm и набор библиотек. Т.е. то что выполняет готовый java код
JDK (java developer kit) это набор инструментов для написания кода и включенный JRE. Тут помимо JRE идут утилиты для разработки(компилятор и т.д.)
JVM (java virtual machine) виртуальная машина(железо) которое исполняет байт код языка
Добавлю пищу для размышлений насчет фразы что java это спецификации и рекомендации. Например Java в андроид это не тоже самое что и в java se для ПК\Mac\Linux. Не тоже самое что и java ME, не тоже самое что Java embendet. И т.д. . У всего перечисленного за основу взяты спецификации Java и исполнены в той или иной мере но львиная часть кода совместима и ведет к ожидаемым результатам. Т.е. условно говоря java это бетон, а вот что из этого бетона сделано, а это может быть погреб\сарай\дом\небоскреб\торговый центр уже конкретная реализация спецификаций и рекомендаций или расхождения с ними. К слову реализаций java vm существует множество. Все спеки JSR можно найти
тут и по ним реализовать любой аспект java или самой jvm.