Как Java независима от платформы, когда ей нужна JVM для запуска? - PullRequest
76 голосов
/ 01 мая 2010

Я только начал изучать Java и запутался в теме независимости от платформы.

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

Например, нам нужен Turbo C Compiler для того, чтобы скомпилировать исходный код C / C ++ и затем выполнить его. На машине должен быть установлен компилятор C.

Может ли кто-нибудь сказать, что имеется в виду, когда Java описывается как «независимый от платформы»?

Ответы [ 23 ]

2 голосов
/ 21 мая 2013

JVM зависит от ОС. для каждой ОС JVM разные.

". Class" одинаков для всех JVM. поэтому каждая JVM понимает данные файла ".class".

Windows-зависимая JVM дает Windows-зависимую инструкцию для Windows Linux-зависимая JVM дает linux-зависимую инструкцию для linux.

это похоже на другие операционные системы. Итак, Java работает в любой операционной системе.

, поэтому Java независима от ОС.

2 голосов
/ 16 ноября 2012

1:jvm (т. Е. Виртуальная машина Java) - это набор программ, который содержит много файлов, которые предоставляют различные функциональные возможности, присутствующие в папке (т.е. наборы программ в формате среднего уровня), так называемые packages. не перегружаться на o/s, где он помогает выполнять только файлы .class или java-приложения только сам по себе. Это помогает сделать формат равенства среднего уровня после компиляции компилятором java, а затем предоставить байтовый код (. файл класса) представление, которое не относится к o/s и processor.
2: jvm делает байт-код в файл .exe, чтобы обработчик мог его понять, и выделяет память для каждой функции после получения байт-кода frm.
3: jvm также освобождает память от оперативной памяти после того, как управление завершает их выполнение.

1 голос
/ 01 мая 2010

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

Схожая идея - уровень абстрагирования оборудования, присутствующий во многих операционных системах, который позволяет одной и той же ОС работать на разнородном оборудовании.

В исходном вопросе Turbo C аналогичен программе javac, а JVM - это OS / HAL.

1 голос
/ 01 мая 2010

Разве независимый означает, что код Java должен работать на любой машине и не требует установки специального программного обеспечения (в этом случае JVM должен присутствовать на машине)?

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

Другими словами, вы можете переносить исходный код и переносить скомпилированный код.

Как, например, нам нужен Turbo C Compiler для того, чтобы скомпилировать исходный код C / C ++ и затем выполнить его. На машине должен быть C компилятор.

Машина не должна иметь компилятор C, машина должна использовать бинарный файл для конкретной платформы. С C или C ++ скомпилированный код специфичен для каждой архитектуры, он не зависит от платформы .

Другими словами, с C / C ++ у вас есть переносимость исходного кода (с некоторой дисциплиной), но не переносимость скомпилированного кода: вам нужно перекомпилировать для каждой архитектуры в двоичные файлы для конкретной платформы.

1 голос
/ 01 мая 2010

JVM будет зависеть от платформы.
Но что бы оно ни генерировало, оно не будет зависеть от платформы. [который мы назвали как байт-код или просто вы можете сказать ... файл класса]. по этой причине Java называется независимой от платформы.
Вы можете запустить тот же файл класса на Mac, но и на Windows, но для этого потребуется JRE.

0 голосов
/ 23 февраля 2015

хорошо, хороший вопрос, но когда исходный код преобразуется в промежуточный собственный байтовый код компилятором, в котором он преобразует программу в байтовый код, сообщая об ошибках сразу после всей проверки (если она найдена), а затем программе требуется Интерпретатор, который будет построчно проверять программу и напрямую изменять ее в машинный код или объектный код, и каждая операционная система по умолчанию не может иметь интерпретатор Java из-за некоторых причин безопасности, поэтому вам нужно иметь jvm любой ценой, чтобы запустить его в этом независимость от платформы другой ОС, как вы сказали здесь, означает, что программа может быть запущена в любой ОС, такой как Unix, Mac, Linux, Windows и т. д., но это не означает, что каждая ОС сможет запускать коды без JVM, который говорит спецификации , реализации и экземпляра, если я продвинусь, изменив конфигурацию вашего ПК, чтобы у вас был загрузчик классов, который может открывать даже байтовый код, тогда вы также можете выполнить байт-код Java, апплеты и т. д. -по нимишу :) удачи

0 голосов
/ 01 мая 2010

Редактировать: Не совсем. См. Комментарии ниже.

Java не работает напрямую ни на чем. Он должен быть преобразован в байт-код JVM.

Поскольку JVM существуют для всех основных платформ, это делает платформу независимой от Java ЧЕРЕЗ JVM.

0 голосов
/ 27 ноября 2014

{App1 (код Java) ------> App1byteCode} ........ {(JVM + MacOS) справка работает с App1, App2, App3}

{App2 (код Java) -----> App2byteCode} ........ {(JVM + LinuxOS) помощь в работе с App1, App2, App3}

{App3 (код Java) -----> App3byteCode} ........ {(JVM + WindowsOS) справка работает с App1, App2, App3}

Как это происходит?

Ответ: JVM может читать ByteCode и отвечать в соответствии с базовой ОС, поскольку JVM синхронизируется с ОС.

Итак, нам нужно JVM с синхронизацией с платформой.

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

Эта Гибкость написания Программы на Java --- компиляция в ByteCode и запуск на любой Машине (да, для ее выполнения требуется наличие Платформы ЗАВИСИМОЙ JVM), делает Java-платформу независимой.

0 голосов
/ 11 сентября 2014

Когда мы компилируем исходные данные на Си, он генерирует собственный код, который может быть понят в текущей операционной системе Когда мы перемещаем этот исходный код в другую операционную систему, он не может быть понят операционной системой из-за собственного кода, который означает, что представление изменяется с O.S на O.S. Таким образом, C или C ++ зависят от платформы.

Теперь в случае java после компиляции мы получаем байт-код вместо нативного. Когда мы будем запускать байт-код, он преобразуется в нативный код с помощью JVM, а затем будет выполнен.

Таким образом, Java не зависит от платформы, а C или C ++ не зависит от платформы.

0 голосов
/ 31 мая 2014

Javac - компилятор, который преобразует исходный код в байтовый код. JVM - интерпретатор, который преобразует байт-код в код машинного языка.

Как мы знаем, java - это язык компиляции ** r & ** . После компиляции Java-кода, также известного как исходный код, он преобразуется в собственный код, известный как BYTE CODE, который является переносимым и может быть легко выполнен во всех операционных системах. Сгенерированный байт-код в основном представлен в шестнадцатеричном формате . Этот формат одинаков на любой платформе, будь то рабочая станция Solaris или Macintosh, Windows или Linux. После компиляции интерпретатор считывает сгенерированный байт-код и переводит его в соответствии с хост-машиной. , Байт-код интерпретируется виртуальной машиной Java, которая доступна во всех операционных системах, которые мы устанавливаем. поэтому для переноса программ Java на новую платформу все, что требуется, - это портировать интерпретатор и некоторые из библиотечных процедур.

Надеюсь, это поможет !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...