Я полагаю, что многие Java-разработчики, когда впервые столкнулись с языком Java, услышали, что Java является кроссплатформенным языком, а Java не зависит от платформы.Это также важная причина быстрого роста популярности Java. язык и его бесконечная популярность. Итак, что же такое независимость от платформы? Как Java достигает независимости от платформы? Эта статья кратко представит.
1
Что такое независимость от платформы
Независимость от платформы означает, что язык работает на компьютере, не ограничиваясь платформой, компилируется один раз и выполняется везде (Write Once, Run Anywhere).
То есть исполняемые двоичные файлы, созданные на Java, могут без изменений работать на нескольких платформах.
Преимущества независимости от платформы
Как независимый от платформы язык, он выдающийся как в плане собственной разработки, так и в отношении удобства для разработчиков.
Из-за своей независимости от платформы программы Java могут работать на различных устройствах, особенно на некоторых встроенных устройствах, таких как принтеры, сканеры, факсимильные аппараты и т.д. С наступлением эры 5G к сети будет подключено больше терминалов, и я считаю, что Java, которая не зависит от платформы, также может внести свой вклад.
Для Java-разработчиков Java сокращает стоимость и время разработки и развертывания на нескольких платформах. Действительно компилируется один раз, работает везде.
2
Независимая от платформы реализация
Независимая от платформы поддержка Java, такая как поддержка безопасности и сетевой мобильности, распределена по всей архитектуре Java. Среди них спецификация языка Java, файл классов, виртуальная машина Java (JVM) и так далее.
Основы принципа компиляции
Говоря о спецификации языка Java, файлах классов и виртуальной машине Java, мы должны упомянуть, как работает Java.
мы вКомпилировать и декомпилировать код JavaКак представлено в компьютерном мире, компьютер знает только 0 и 1, поэтому то, что на самом деле выполняется компьютером, на самом деле является двоичным файлом, состоящим из 0 и 1.
Однако C, C++, Java, Python и т. д., которые мы используем в нашей повседневной разработке, — это языки высокого уровня, а не двоичные языки. Следовательно, чтобы компьютер распознал написанный нами Java-код, ему необходимо «перевести» его в двоичный файл, состоящий из 0 и 1. Этот процесс называется компиляцией. Инструмент, который обрабатывает этот процесс, называется компилятором.
существуетУглубленный анализ принципов компиляции JavaМы представили, что на платформе Java, если вы хотите скомпилировать файл Java в двоичный файл, вам необходимо пройти два этапа компиляции: компиляцию внешнего интерфейса и компиляцию внутреннего интерфейса:
Компиляция внешнего интерфейса в основном относится к части, связанной с исходным языком, но не связанной с целевой машиной. В Java мы знаемjavac
Компиляция — это предварительная компиляция. В дополнение к этому, многие используемые нами IDE, такие как eclipse, idea и т. д., имеют встроенные интерфейсные компиляторы. Основная функция состоит в том, чтобы.java
код в.class
код.
упоминается здесь.class
Код на самом деле является файлом класса.
Внутренняя компиляция в основном предназначена для повторного перевода промежуточного кода на машинный язык. В Java этот шаг выполняется виртуальной машиной Java.
Поэтому то, о чем мы говорили, платформонезависимая реализация Java в основном действует на вышеуказанных этапах. Как показано ниже:
Давайте представим этих трех основных действующих лиц от начала до конца: виртуальная машина Java, файл класса, спецификация языка Java.
Виртуальная машина Java
Так называемая независимость от платформы означает, что он может быть легко подключен к нескольким платформам. Однако для разных платформ аппаратное обеспечение и операционные системы определенно отличаются.
Для разного железа и операционных систем главное отличие в том, что инструкции разные. Например, если также выполняется a+b, двоичная инструкция, соответствующая операционной системе A, может быть 10001000, а соответствующая инструкция операционной системы B может быть 11101110. Затем, если вы хотите добиться кросс-платформенности, самое главное — сгенерировать соответствующие двоичные инструкции в соответствии с соответствующим оборудованием и операционной системой.
И эта работа в основном выполняется нашей виртуальной машиной Java. Хотя язык Java не зависит от платформы, JVM действительно зависит от платформы, и соответствующая JVM должна быть установлена в разных операционных системах.
На приведенном выше рисунке показано руководство по загрузке JDK с официального сайта Oracle Для разных операционных систем необходимо загрузить соответствующую виртуальную машину Java.
С виртуальной машиной Java, если вы хотите выполнить операцию a+b, виртуальная машина в операционной системе A преобразует инструкцию в 10001000, а виртуальная машина в операционной системе B преобразует инструкцию в 11101110.
 ps: содержимое файла класса на рисунке является фиктивным содержимым.
Следовательно, причина, по которой Java может быть кроссплатформенной, заключается в том, что виртуальная машина Java действует как мост. Он действует как буфер между исполняемой Java-программой и базовым оборудованием и операционной системой.
байт-код
Виртуальные машины различных платформ используют единый формат хранения программ — байт-код (ByteCode) — еще один краеугольный камень платформенной независимости. Виртуальная машина Java взаимодействует только с файлами классов, состоящими из ее собственного кода.
Мы говорим, что язык Java может написать один раз и работать где угодно. Написание здесь на самом деле относится к процессу создания файлов классов.
Поскольку файлы классов Java могут быть созданы на любой платформе, а также могут быть загружены и выполнены виртуальной машиной Java любой платформы, Java не зависит от платформы.
Спецификация языка Java
С унифицированным файлом Class и виртуальной машиной Java, которая может преобразовывать файлы Class в соответствующие двоичные файлы на разных платформах, может ли Java быть полностью кроссплатформенной?
На самом деле это не так.Язык Java также приложил некоторые усилия в кроссплатформенности, и эти усилия определены в спецификации языка Java.
Например, диапазон и поведение примитивных типов данных в Java определяются сами по себе. В C/C++ базовый тип данных определяется его шириной заполнения, а ширина заполнения определяется платформой. Поэтому на разных платформах результаты компиляции одной и той же программы C++ будут вести себя по-разному.
Чтобы привести простой пример, для типа int в Java int занимает 4 байта, что является фиксированным.
Но это не исправлено в C++. На 16-битном компьютере длина типа int может составлять два байта, на 32-битном компьютере — 4 байта, когда 64-битные компьютеры станут популярными, длина типа int может достигать 8 байт. (Здесь все возможно!)
Язык Java обеспечивает надежную поддержку независимости от платформы, гарантируя согласованность основных типов данных на всех платформах.
3
резюме
Независимая от платформы поддержка Java распределена по всей архитектуре Java. Среди них спецификация языка Java, файл класса, виртуальная машина Java и т. д., которые играют важную роль.
-
Спецификация языка Java
-
Указав диапазон значений и поведение базовых типов данных в языке Java
-
Файл класса
-
Все файлы Java должны быть скомпилированы в единый файл класса.
-
Виртуальная машина Java
-
Преобразуйте файл класса в соответствующий двоичный файл платформы через виртуальную машину Java и т. д.
Независимость Java от платформы основана на зависимости виртуальной машины Java от платформы, поскольку виртуальная машина Java скрывает различия между базовой операционной системой и оборудованием.
4
языковая независимость
На самом деле независимость Java отражается не только в независимости платформы.Расширяясь вовне, Java также независима от языка, точнее, виртуальная машина Java независима от языка.
Мы упоминали ранее. На самом деле JVM взаимодействует не с Java-файлами, а с Class-файлами, то есть при запуске JVM не зависит от языка Java.
Сегодня коммерческие организации и организации с открытым исходным кодом разработали большое количество языков, отличных от Java, которые могут работать на JVM, таких как Groovy, Scala, Jython и т. д. Причина, по которой он может поддерживаться, заключается в том, что эти языки также могут быть скомпилированы в байт-код (класс Wenjin). Виртуальной машине все равно, из какого языка скомпилирован байт-код. смотрите подробностиКруто, научу вас выводить HelloWorld на JVM на девяти языках
использованная литература
«Углубленное понимание виртуальной машины Java (второе издание)»
«Углубленная виртуальная машина Java»
«Спецификация языка Java — на основе Java SE 8»
«Спецификация виртуальной машины Java, 8-е издание»
Пересылка его в круг друзей - это самая большая поддержка для меня.