Так, если обычно при компиляции программы (например, написанной на C++) на выходе мы получаем исполнительный машинный код, то в результате компиляции Java-программы получают промежуточный байт-код, который выполняется не операционной системой, а виртуальной Java-машиной