... где у каждого есть свой компилятор для своей платформы.Таким образом, преимущество не объясняется этим.
Портирование кода, написанного, например, на C или C ++, почти всегда намного более сложное, чем простая перекомпиляция кода.Это, конечно, не то, что обычный пользователь компьютера, не являющийся разработчиком, может легко это сделать.Код, написанный на скомпилированных языках, очень часто пишется на основе API конкретной операционной системы (например, Win32 API), и поэтому его нелегко скомпилировать в других операционных системах.
Байт-код Java работает на любой платформе, гдедоступна среда выполнения Java.Код не нужно перекомпилировать.Конечно, вы можете писать специфичный для операционной системы код на Java, но стандартная библиотека Java и множество бесплатных библиотек, доступных в Интернете, предоставляют очень богатую кроссплатформенную среду.
Помимо переносимости, работа на виртуальной машинеимеет другие преимущества.Java использует JIT-компилятор для компиляции байт-кода Java в машинный код во время выполнения.JIT-компилятор может выполнять сложные оптимизации для конкретного процессора, на котором выполняется программа, и он может использовать информацию о профилировании, которая не будет доступна для заблаговременного компилятора - поэтому в принципе JIT-компилятор может создавать более оптимальный кодкроме «обычного» компилятора.
Помимо Java VM, существуют и другие виртуальные машины.Например, Microsoft .NET содержит CLR (Common Language Runtime), а также есть LLVM , который имеет интерфейсы для многих различных языков, включая C и C ++ (и который долженпринести преимущества JIT-компиляции также в C и C ++).