2010-01-22 2 views
10

Просто интересно узнать, когда java создана независимой от платформы, есть ли какие-либо конкретные причины, по которым JVM становится зависимой от платформы.Почему JVM не является независимой от платформы, учитывая, что Java (язык) независим от платформы?

+7

Что вы на самом деле спрашиваете? – nos

+5

Я лично считаю, что это не должно было быть закрыто (проголосовали за повторное открытие). Вопрос может быть тонко сформулирован, но есть «реальный» вопрос (хотя ответ может показаться очевидным с первого взгляда некоторым). – ChristopheD

+0

@ ChristopheD - не могли бы вы прояснить вопрос? – KatieK

ответ

13

Если у вас нет процессора, который может напрямую выполнять байт-код Java (есть такие вещи), вы должны иметь возможность взаимодействовать с ОС (например, чтение файлов, подключение к сети, отображение на экране и т. Д. ..).

Вы можете написать JVM на других языках (например, Java или JavaScript), но в конечном итоге должно быть что-то, что может взаимодействовать с базовой ОС.

16

JVM выполняет Java-код, но написан на языках платформы, таких как C/C++/ASM и т. Д. JVM не написан на Java и, следовательно, не может быть независимой от платформы.

+2

На самом деле, несколько JVM * * написаны на Java: Maxine и Jikes - всего лишь два примера. –

+2

Поскольку для запуска бутстрапа требуется небольшой загрузчик C, зависящий от платформы, независимо от того, что кто-то говорит, JVM не является 100% java :) –

+1

Вы правы. Хотя способ, которым эти виртуальные машины имеют тенденцию использовать C, больше похож на язык описания данных, а не на язык программирования. Они в основном полагаются на компилятор C, чтобы получить структуры данных, выложенные, как ожидала их ОС, и не столько для семантики C. Вероятно, вы могли бы написать Java-программу, которая генерирует правильные макеты памяти, но зачем вам? Компилятор C платформы уже содержит всю неприятную логику компоновки. –

9

JVM должен быть зависимым от платформы, чтобы позволить вашей Java работать на конкретной платформе. JVM для Windows переведет вашу Java в разные системные вызовы, чем JVM для OS X.

3

Потому что необходимо каким-то образом преобразовать вызовы Java, не зависящие от платформы, к вызовам, совместимым с базовой ОС.

11

я обнаружил, что это был отличный ответ на вопрос:

JVM переводит байт-код в машинный язык

программа Каждый Java является компилируется в промежуточный язык, называемый Java байт-код. JVM используется для перевода байт-кода в машинный язык для конкретного компьютера и фактически выполняет соответствующие инструкции на языке машинного языка . JVM и байт-код, объединенные в , предоставляют Java свой статус «портативного» языка.

язык Машина ОС зависит

Учитывая предыдущую информацию, она должна быть проще вывести в ответ на этот вопрос. Поскольку JVM должен перевести байт-код в машинный язык , и поскольку язык машины зависит от используемой операционной системы , ясно, что JVM - это платформа (операционная система). Этот факт можно проверить, попробовав до скачать JVM - вам будет предоставлен список JVM, соответствующий различных операционных системах, и вы, очевидно, будете выбирать, какой JVM предназначен для операционной системы, в которой вы работаете.

Цитируется Is the JVM Platform Dependent?

+0

этот ответ полезен ... –

3

Нет, JVMs не зависит от платформы. Фактически, они представляют собой среду времени выполнения платформы, предоставляемую поставщиком. Каждая платформа (Windows, UNIX, Mac и т. Д.) Имеет собственную JVM для запуска приложений Java. Хотя код байта поддерживает подключение к нескольким базам данных.

Думайте о музыке, которую играют в MP3-плеере, проигрывателе компакт-дисков и старых верных кассетных плеерах (Boom Box). Выход всегда один и тот же, то есть музыка. Но вход (носитель, т. Е.mp3-файлы для MP3-плееров, компакт-дисков для CD-плееров и кассет для кассетных плеч) различаются в зависимости от системы [здесь будут использоваться различные операционные системы, такие как Windows, UNIX, Mac и т. д.). Надеюсь, я смог решить вашу проблему.

0

просто как - * - делает +.

Мы все знаем, Java является независимым от платформы

но OS, где мы пишем код зависит от платформы

и выход должен быть независимым от платформы так, мы делаем JVM (который находится между и устанавливается с jre), так что выход независим.

+0

Вид. _language_ не зависит от платформы, но он как-то должен _run_ на этой платформе. Механизм для этого будет зависеть от платформы, на которой он работает. – vonbrand

0

Я думаю, что он может быть независимым от платформы, если много разных языков (каждая из которых написана на определенной другой платформе), где объединены, чтобы заставить его изменять свой собственный код динамически. Но все это требует больших усилий, чтобы произойти и, возможно, уничтожить его переносимость ,

0

JVM переводит код байта, который является универсальным для машинного кода, который зависит от машины, поэтому JVM зависит от платформы. Из-за этого байтового кода java не зависит от платформы.

-1

Нет, JVM зависит от платформы. Код, написанный на Java, не зависит от платформы. Если вы пишете Java-код в операционной системе Windows, вы можете запустить этот код в Linux или других операционных системах. Но JVM для Windows и Linux отличается. JVM находятся в JRE, и когда вы загружаете JRE из Oracle, он говорит, что JRE для Windows, Linux и других операционных систем

1

JVM зависит от операционной системы. Чтобы код был независимым, что-то должно зависеть, а это JVM. При загрузке JDK он запрашивает, для какой ОС вы хотите загрузить его. Что явно подразумевает, что JVM зависит от платформы.

1

Виртуальная машина Java не зависит от платформы

Ключевым моментом здесь является то, что JVM зависит от операционной системы, - так что, если вы работаете в Mac OS X, вы будете иметь другой JVM, чем если вы работаете в Windows, или какой-либо другой операционная система. Этот факт можно проверить, пытаясь загрузить JVM для вашей конкретной машины - при попытке загрузить его вам будет предоставлен список JVM, соответствующий различным операционным системам, и вы, очевидно, будете выбирать, какая из JVM предназначена для операционной системы, которая Ты бежишь.

Смежные вопросы