Как платформа Java независима, когда ей нужна JVM?

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

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

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

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

Ответ 1

Как правило, скомпилированный код представляет собой точный набор инструкций, требуемых ЦПУ для "выполнения" программы. В Java скомпилированный код представляет собой точный набор инструкций для "виртуального процессора", который необходим для работы на каждой физической машине.

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

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

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

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

Конечно, есть способы, которыми вы можете нарушить переносимость Java-программы. Вы можете написать программу, которая ищет файлы, найденные только в одной операционной системе (например, cmd.exe). Вы можете использовать JNI, который эффективно позволяет помещать скомпилированный код C или С++ в класс. Вы можете использовать соглашения, которые работают только для определенной операционной системы (например, при условии, что:: "разделяет каталоги" ). Но вам гарантированно никогда не придется перекомпилировать свою программу для другой машины, если вы не делаете что-то действительно особенное (например, JNI).

Ответ 2

            Technical Article on How java is platform indepedent?

Прежде чем вдаваться в подробности, сначала вы должны понять, что означает платформа? Платформа состоит из компьютерного оборудования (в основном архитектуры микропроцессора) и ОС. Платформа = оборудование + Операционная система

Все, что не зависит от платформы, может работать на любой операционной системе и оборудовании.

Java является платформой, поэтому java может работать на любой операционной системе и аппаратном обеспечении. Теперь вопрос в том, как он независим от платформы?

Это из-за магии байтового кода, который является ОС без изменений. Когда компилятор java компилирует любой код, он генерирует байт-код, а не собственный код машины (в отличие от компилятора C). Теперь это байт-код нужен интерпретатор для выполнения на машине. Этот интерпретатор JVM.So JVM читает этот байт-код (который является машинным без изменений) amd выполнить его. Различные JVM предназначены для разных ОС, а байт-код может работать на разных ОС.

В случае C или С++ (язык, который не является независимым от платформы) компилятор генерирует файл .exe, который является OS depedent, поэтому, когда мы запустите этот .exe файл на другой ОС, он не будет запущен, потому что этот файл является OS-папкой, поэтому он несовместим с другой ОС.

Наконец, промежуточный OS-код без байта делает независимую платформу Java.

Ответ 3

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

Ответ 4

JVM - это "имитируемый компьютер", который может быть установлен на разных системах. Таким образом, один и тот же Java-код может работать на разных системах, поскольку он зависит от JVM, а не от самой операционной системы.

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

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

Ответ 5

Нет, это наоборот. Это потому, что вы используете виртуальную машину, чтобы программа Java становилась независимой.

Виртуальная машина не является независимой, вам необходимо установить тот, который специально создан для вашего типа системы. Виртуальная машина создает независимую платформу поверх операционной системы.

Ответ 6

Рефераты JVM с конкретной платформы. Ваша программа зависит только от JVM, и поскольку JVM доступен для разных платформ, таких как Windows и Linux, ваша программа независима от платформы (но зависит от jvm).

Ответ 7

В c/С++ исходный код (c файл программы) после компиляции с использованием компилятора напрямую преобразуется в собственный машинный код (что понятно для конкретной машины, на которой и компилируется код). И, следовательно, скомпилированный код c/С++ не может работать на разных ОС.

Но в случае Java: исходный файл java (.java) будет скомпилирован с использованием JAVAC-компилятора (присутствует в JDK), который предоставляет байт-код (файл .class), который понятен любому JVM, установленному на любой ОС ( Физическая система).

Здесь нам нужно иметь разные JVM (которые зависят от платформы) для разных операционных систем, где мы хотим запустить код, но файл .class(скомпилированный код/​​промежуточный код) остается таким же, поскольку он понятен любому из JVM, установленный на любой ОС.

В c/С++: только исходный код не зависит от машины. В Java: как исходный код, так и скомпилированный код независимы от платформы.

Это делает независимую платформу Java (машина).

Ответ 8

java не является платформой Independent, сама по себе платформа, основанная на этой платформе java-приложений, но сама платформа java зависит от платформы

Ответ 9

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

Ответ 10

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

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

Аналогичным образом, если вы код, а я - JVM. Кроме того, ваша семья - платформа для Windows, а моя - платформа Linux. В случае, если вы являетесь C или другими языками, зависящими от платформы, вы знаете только членов своей семьи и наоборот. Вот почему только платформа, на которой вы были написаны, знает этот код и будет его поддерживать. Но если вы код JAVA и когда вы приходите в мою семью, а именно. платформу Linux, и если там вы найдете меня, JVM, то я могу познакомить вас с моей семьей, платформой Linux, и вы сможете взаимодействовать с ней.

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

Ответ 11

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

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

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

Ответ 12

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

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

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

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

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

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

Ответ 13

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

Ответ 14

JVM зависит от os. для каждого os JVM разным.

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

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

что нравится другим операционным системам. поэтому java работает в любой операционной системе.

почему java независим от os.

Ответ 15

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

Ответ 16

Просто обратите внимание на обсуждение JVM и JIT Compilation. Это тот же принцип, что и для С# и CLR, и в некоторой степени в Python, и когда кто-то говорит, что код работает "непосредственно на аппаратном обеспечении", который действительно является истинным в тех командах, которые уже скомпилированы, сможет воспользоваться оптимизацией на машине/процессоре, на котором он запускается. Поэтому, даже если начальная компиляция модуля довольно медленная, в следующий раз, когда этот модуль будет запущен, выполняемый код запускается с нативной скоростью и, таким образом, работает непосредственно на аппаратном обеспечении, чтобы сказать.

Ответ 17

Java является независимой от платформы в аспекте Java-разработчика, но это не относится к конечному пользователю, которому требуется JVM, зависящая от платформы, для запуска Java-кода. В принципе, когда java-код скомпилирован, генерируется байт-код, который обычно не зависит от платформы. Таким образом, разработчик должен написать один код для всей серии платформ. Но это преимущество приносит головную боль для конечных пользователей, которым необходимо установить JVM для запуска этого скомпилированного кода. Этот JVM отличается для каждой платформы. Таким образом, зависимость вступает в силу только для конечного пользователя.

Ответ 18

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

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

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

Ответ 19

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

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

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

Ответ 20

{App1 (код Java) ------ > App1byteCode}........ {(JVM + MacOS) help work с App1, App2, App3}

{App2 (код Java) ----- > App2byteCode}........ {(JVM + LinuxOS) help work с App1, App2, App3}

{App3 (Java Code) ----- > App3byteCode}........ {(JVM + WindowsOS) help work с App1, App2, App3}

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

Ans: JVM имеет возможность читать ByteCode и Response In Соответствует базовой ОС. Поскольку JVM находится в синхронизации с ОС.

Итак, мы находим, нам нужна JVM с Sync with Platform.

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

Эта гибкость программы записи в Java --- скомпилировать до ByteCode и запускаться на любом компьютере (да, нужно иметь платформу DEPENDENT JVM для ее выполнения) делает платформу Java Platform независимой.

Ответ 21

Хороший вопрос, но когда исходный код изменен на промежуточный код базового байта компилятором, в котором он преобразует программу в байтовый код, предоставляя ошибки после всей проверки сразу (если найден), а затем программа нуждается в интерпретатор, который будет проверять программу за строкой и напрямую изменять ее в машинный код или объектный код, и каждая операционная система по умолчанию не может иметь java-интерпретатор из-за некоторых соображений безопасности, поэтому вам нужно иметь jvm любой ценой для запуска в этой разная независимость платформы ОС, как вы сказали здесь, означает, что программа может быть запущена в любых ОС, таких как unix, mac, linux, windows и т.д., но это не означает, что каждый os сможет запускать коды без jvm, который говорит, что спецификация, реализация и экземпляр, если я продвигаюсь тогда, изменяя конфигурацию вашего компьютера так, чтобы у вас мог быть загрузчик классов, который может открыть даже байтовый код, а также вы можете выполнить java-байтовый код, апплеты и т.д. -by nimish:) Удачи тебе.

Ответ 22

Изменить: Не совсем. См. Комментарии ниже.

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

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