Java и Java-машина
Язык Java и JVM (Java Virtual Machine, виртуальная машина Java) работают в паре. Java - это текст, который пишет человек. JVM - программа, которая этот текст после подготовки выполняет на конкретном компьютере.
Слово машина здесь легко понять буквально, и это будет ошибкой. JVM - не отдельный компьютер и не системный блок. Ее устанавливают на тот компьютер, где код должен выполняться.
Компьютеры разные: процессоры и операционные системы устроены по-разному. Windows, Linux и macOS принимают не один и тот же файл команд. Если перевести программу сразу в команды одного процессора, на другом компьютере она часто просто не запустится.
Программу на Java процессору напрямую не отдают. Сначала компилятор переводит исходный код в байткод. Исходный код - текст в файлах, который правят, когда программа меняется. Байткод - список простых команд в промежуточной форме. Компилятор складывает байткод в отдельные файлы.
Дальше работает JVM. Она открывает файлы с байткодом и выполняет команды одну за другой. На Windows стоит своя сборка JVM, на Linux своя, на macOS своя. Байткод для них общий. Одну и ту же подготовленную программу переносят на другую систему, если там тоже установлена JVM.
Без установленной JVM байткод остается просто файлами. Сам он не стартует. JVM - обязательная часть запуска Java, а не дополнительная программа вокруг языка.
Расскажите своими словами, что такое JVM и почему это не отдельный компьютер.
Расскажите своими словами, зачем компилятор получает байткод, а не команды одного конкретного процессора.
Расскажите своими словами, почему одну и ту же подготовленную программу запускают и на Windows, и на Linux, и на macOS.
Расскажите своими словами, что будет с файлами байткода, если JVM на компьютере не установлена.