Почему платформа Java независима в теории и платформа зависит на практике? - PullRequest
8 голосов
/ 10 ноября 2010

Я знаю, что одной из важных особенностей Java является то, что она не зависит от платформы в том смысле, что вы можете создавать приложения Java и запускать их в Windows, Linux, Mac и т. Д., Пока вы не t использовать библиотеки, специфичные для одной ОС, и если у вас установлена ​​JVM для соответствующей ОС, чтобы правильно интерпретировать вещи ...

Однако, почему обычная компьютерная Java-программа (как в простом Hello World на Java, например, для Windows или Linux) не может работать так же на мобильном телефоне, когда на мобильных телефонах также установлена ​​определенная JVM для правильно интерпретировать вещи?

Почему необходимо изменить архитектуру программы в некоторых случаях, например, для разработки под Android, или использовать Java ME, чтобы сделать приложения специфичными для некоторых мобильных телефонов?

Я знаю, что есть некоторые функции, связанные с определенными функциями ОС, которые могут не применяться, например, на мобильных платформах, например, некоторые вещи, связанные с консолью, методами ввода и т. Д., Но действительно ли это единственная причина, которая делает вещи несовместимыми? Если это так, то почему простое приложение, которое просто объявляет и инициализирует целочисленную переменную, не сможет работать на всех немобильных и мобильных платформах, на которых доступна JVM?

Мне известны другие вопросы, которые были опубликованы ранее, например, this , но они не сфокусированы на точной точке, к которой я стремлюсь.

Ответы [ 5 ]

8 голосов
/ 10 ноября 2010

Единица переносимости, на которую нужно смотреть, - это класс , а не приложение . Класс, который объявляет и инициализирует целочисленную переменную , будет работать на всех платформах, которые вы описываете, а также на многих других. Они понимают один и тот же байт-код, даже если они выполняют его, используя разные механизмы, начиная от интерпретаторов байт-кода и заканчивая JIT-компиляцией, до Android Dalvik (который переводит байт-код JVM в собственный набор команд).

Даже если мы рассмотрим не одну целочисленную переменную, Java, использующая «базовую» функциональность , будет работать на большинстве этих устройств. Между J2ME, Android и J2SE есть много общего (и особенно последние два - J2ME задумывался как урезанная версия стандартных Java API для устройств с ограниченными ресурсами, поэтому доступно меньше стандартного API).

В системе Windows / Mac / Linux приложением обычно является то, что вы явно запускаете, используете и - когда закончите - приказываете ему выйти. Сравните это, скажем, с телефоном Android: приложение может быть запущено в ответ на происходящее событие (возможно, входящее SMS или файл определенного типа, загруженный из Интернета), и в этом случае ему необходимо знать как и почему это было начато - простой public static main(String[] args) просто не сокращает его. После запуска приложение должно знать о таких событиях, как «разряженная батарея» или «переход в режим ожидания», чтобы высвободить ресурсы или отключить ресурсоемкие функции (такие как GPS), которые в противном случае могут разрядить батарею.

Это не скрытые функции - они необходимы для того, чтобы телефон был полезен в качестве телефона - поэтому все нативные приложения должны с ними справляться.

4 голосов
/ 23 октября 2011

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

спасибо

2 голосов
/ 16 октября 2013

Почему платформа Java независима в теории и платформа зависит на практике?

Помните и проясняйте одну вещь, что только язык Java независим от платформы, и пытайтесь понять смысл предложения.,Java не зависит от платформы, поэтому код, разработанный вами с использованием Java, может быть запущен на любой машине.

Когда вы компилируете файл .java, он генерирует файл .class, который содержит байт-код, и этот байт-код не зависит от платформы, вы можете запускать его на любом компьютере, что касается независимости платформы языка Java.

Теперь вы сказали, что это не на практике, поэтому причина в том, что только язык Java не зависит от платформы, но его среда выполнения или JVM зависит от платформы, он написан отдельно для каждой ОС.Таким образом, мы можем сказать, что язык Java не зависит от платформы, но его среда выполнения зависит от платформы.

1 голос
/ 08 января 2014

Sun Micro Systems выпустила различные версии JDK.один для Windows и другой для Linux / Unix.Когда мы установили jdk, мы получили jvm, jre и javac.Предположим, что если мы напишем Java-программу в Windows с процессором Intel, который установлен с Windows JDK, то Java-компилятор этого JDK преобразует файл .java в файл .class, который содержит инструкции байт-кода, аналогичные кодам языка ассемблера, которые эти инструкции байт-кода могутбыть понятным только по jvm.Если мы возьмем файл .class, сгенерированный в Windows OS, и если мы запустим в Linux, то jvm этой машины linux внутренне переписывает вашу java-программу, используя приблизительные 200+ наборов инструкций, которые разработаны javasoft people и размещены как частьJVM.и файл .class исполняется.Поэтому здесь важно сосредоточиться на том, что jdk зависит от платформы, но .class не зависит от платформы, это зависит от платформы, потому что jvm отвечает только за запуск любых файлов .class.Каждый jvm jdk внутренне имеет предопределенные наборы инструкций, т.е.200 +.

1 голос
/ 10 ноября 2010

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

...