Как работает язык Java - PullRequest
3 голосов
/ 07 февраля 2011

Мои знания Java невелики, поэтому я хочу спросить, как работает язык. Под этим я подразумеваю не только « Language », но и виртуальную машину.

Вот мое понимание.

  1. Компилятор Java превращает код в байт-код Java. в виде файла .java
  2. при запуске файла JVM читает (как раз вовремя) байт-код и превращает его в машинный код.
  3. Компьютер считывает машинный код, и программа, кажется, запускается как скомпилированная программа (для пользователя).

Это безнадежно неправильно?

Ответы [ 6 ]

3 голосов
/ 07 февраля 2011

Ответов уже много, но я упускаю один важный момент:

"2. Когда файл запускается, JVM читает (как раз вовремя) байт-код и оборачиваетсяэто в машинный код. "

Это не совсем правильно.

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

Менее трудоемкие части кода могут оставаться интерпретированными.Если ситуация меняется (например, при загрузке нового класса), некоторый скомпилированный код может показать, что он больше не является оптимальным или даже некорректным, и он отбрасывается, а JVM на некоторое время возвращается к интерпретации, а затем повторно компилирует его.

2 голосов
/ 07 февраля 2011
2 голосов
/ 07 февраля 2011

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

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

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

0 голосов
/ 05 февраля 2018

Если быть точным,

  • Когда вы создаете класс Java, расширение будет .java

  • Во время компиляции компилятор преобразуеткод (файл .java) в .class (байт-код).

  • При выполнении кода JVM преобразует байт-код (файл .class) в машинный код, который можно интерпретировать.ОС.Это делает Java независимой от платформы и JVM зависимой от платформы.

0 голосов
/ 07 февраля 2011

Почти:

  • компилятор Java создает файлы .class, а не файлы .java, которые содержат байт-код. Файлы .java содержат исходный код.
  • JVM (виртуальная машина Java) похожа на (виртуальный) компьютер сам по себе. Он интерпретирует байт-код. ОС запускает только JVM.
  • JIT (как раз вовремя) компилятор может компилировать часть кода в машинный код по соображениям производительности, и в этом случае JVM делегирует выполнение этого кода ОС (я полагаю).
0 голосов
/ 07 февраля 2011

Ваше понимание верно.Я хотел бы добавить ниже

  1. Компилятор HotSpot также адаптивно компилирует байт-коды Java в оптимизированные машинные инструкции
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...