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

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

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

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

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

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

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

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

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

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

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

  Technical Article on How java is platform indepedent? 

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

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

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

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

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

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

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

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

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

JVM – это «имитируемая машина», которая может быть установлена ​​на разных системах. Таким образом, один и тот же Java-код может работать в разных системах, поскольку он зависит от JVM, а не от самой операционной системы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{App2 (Java Code) —–> App2byteCode} …….. {(JVM + LinuxOS) помогает работать с App1, App2, App3}

{App3 (Java Code) —–> App3byteCode} …….. {(JVM + WindowsOS) помогает работать с App1, App2, App3}

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

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

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

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

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

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

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

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

  • Кросс-платформенный формат строки для переменных типа size_t?
  • Независимые от платформы пути в Java
  • Почему расчетная ширина и высота в пикселе строки в Tkinter различаются между платформами?
  • На каких платформах есть что-то, кроме 8-битного символа?
  • Interesting Posts

    Нужна помощь в создании расширенной команды контекстного меню в Windows 7 (x64)

    Создатель транскрипции ИЛИ Речь в текст

    Будет ли Internet Explorer работать в Windows 10?

    Как избежать проблемы «слишком много параметров» в дизайне API?

    Какая оптимизация предлагает const в C / C ++? (если есть)

    TortoiseGit с ключом openssh не аутентифицируется с использованием ssh-agent

    Параметры sshd и -i для OS X

    Являются ли значения по умолчанию в JDK 8 формой множественного наследования в Java?

    Установка сетевого тайм-аута для подключения JDBC

    Как бы вы установили переменную в наибольшее возможное число в C?

    Каковы некоторые примеры использования символьных литералов в Scala?

    Должен ли я использовать службу Google Public DNS для своего рабочего стола?

    Могу ли я сделать функцию доступной в каждом controllerе в угловом?

    Объединение проводной сети с сетью ad-hoc

    WPF TreeView HierarchicalDataTemplate – привязка к объекту с несколькими дочерними коллекциями

    Давайте будем гением компьютера.