Nano Hash - криптовалюты, майнинг, программирование

Назначение файлов .class в Java

Я пытаюсь понять, как файлы .class работают в java и какова их цель. Я нашел некоторую информацию в Интернете, но получаю неудовлетворительные объяснения.

Как только мы запускаем компилятор, мы получаем файл .class, который представляет собой байт-код. Эта машина читается или нет? А если нет, то зачем нужен интерпретатор для успешной работы программы?

Кроме того, поскольку файл .class является эквивалентом наших программ .java, почему нельзя сразу запустить программу java, просто запустив файл .class с помощью виртуальной машины, и им также потребуется файл .java?


Ответы:


1

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

Итак, файлы классов содержат инструкции в виртуальном наборе инструкций, и он способен их выполнять. Если на то пошло, виртуальная машина может либо интерпретировать сам код, либо скомпилировать его для аппаратной архитектуры, на которой она работает в данный момент. Некоторые делают оба, некоторые только один из них (например, среда выполнения .net компилируется один раз при первом вызове метода).

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

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

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

29.03.2014

2
  1. Файл .class является машиночитаемым. Машина, которая его читает, — это виртуальная машина Java, которая интерпретирует его и компилирует в собственный код (исполняемый вашим компьютером).

  2. Вам не нужны файлы .java для запуска кода Java. Файлы .class — это все, что вам нужно.

29.03.2014

3

Он машиночитаем, но не работает на голом оборудовании. Он запускается через виртуальную машину Java, которая представляет собой интерпретатор с очень высокопроизводительным компилятором точного времени. Есть веские причины, чтобы интерпретатор использовал только байт-код файла класса. Кратко они:

  1. Легче построить интерпретатор, поскольку байт-код намного ближе к инструкциям, которые можно превратить в собственный машинный код с помощью JIT.
  2. Легче разрешать зависимости, поскольку компилятор Java делает с ними некоторый синтаксический сахар с помощью команды импорта.
29.03.2014

4

Байт-код Java (.class файл) не является исполняемым напрямую. Это промежуточный язык, который интерпретируется базовой виртуальной машиной Java. Конечно, возможна некоторая оптимизация (например, своевременная компиляция).


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

29.03.2014

5

Компилятор против интерпретатора:

  1. Компилятор принимает на вход всю программу
    Интерпретатор принимает на вход отдельные инструкции.

  2. Генерируется промежуточный объектный код
    Промежуточный объектный код не создается

  3. Условные операторы управления выполняются быстрее
    Условные операторы управления выполняются медленнее

  4. Требования к памяти: больше (поскольку генерируется объектный код)
    Требования к памяти: меньше

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

  6. Ошибки отображаются после проверки всей программы
    Ошибки отображаются для каждой интерпретируемой инструкции (если есть)

  7. Пример: Компилятор C
    Пример: BASIC

08.11.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..