C++ не зависит от платформы, потому что его необходимо скомпилировать в собственный код, а другой компилятор должен быть реализован для разных архитектур процессора.Как генерация байт-кода делает платформу Java независимой, если реализация JVM отличается от одной машины к другой?
Компилятор C++ только переводит код в машинный язык или собственный код. Этот собственный код выполняется процессором.
Из того, что я читал в сети, Java-программа изначально компилируется в Bytecode с помощью java-компилятора javac. Этот байт-код затем интерпретируется (и выполняется) по линейной основе виртуальной машиной Java.
У меня есть несколько запросов.
1) Если C++ не является независимой от платформы, поскольку разные компиляторы должны быть сконструированы для разных архитектур процессора, то не отличается ли JVM от одного оборудования к другому?
2) Если я написал код на C++ и скомпилировал и выполнил его на машинах 1 и 2, результат будет таким же. Точно так же, если я пишу программу Java и выполняю ее на двух разных машинах, вывод будет все тот же. Почему дополнительный шаг генерации байткода?
3) Я где-то читал, что переводчики, в отличие от компиляторов, фактически выполняют программу путем эмуляции виртуальной машины. Означает ли это, что JVM фактически выполняет байт-код, а не просто интерпретирует его в собственный код?
Прочитайте http://stackoverflow.com/q/2748910/1110928 и http://stackoverflow.com/q/2203248/1110928. Я утверждаю, что это дубликат второго вопроса, который я перечислил. Короче говоря, вы могли бы думать о JVM как эмулированном процессоре, поэтому набор команд байткода одинаковый для любого оборудования. – apnorton
Я все еще не понимаю, почему исходный код напрямую не интерпретируется и не выполняется JVM. –
Итак, вы спрашиваете: «Почему мы компилируем байт-код как промежуточный, вместо того, чтобы делать то, что, скажем, Python, путем компиляции и интерпретации« на лету »? – apnorton