Какова роль ОС, когда JVM выполняет приложение Java? И зачем нам нужна ОС?

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

Итак, теперь с JVM, что произойдет? Как я знаю, JVM (содержит среду выполнения) будет сначала вызываться ОС. С этого момента JVM создаст один (или много) поток для приложения. Интересно, играет ли роль ОС в игре? Мне кажется, что JVM "обходила" ОС и напрямую поручила процессору выполнить приложение. Если да, зачем нам нужна ОС?

Взяв немного больше, JVM будет использовать свой JIT для компиляции кодов байтов приложения в машинные коды, а затем выполнить эти машинные коды. Так как это уже машинные коды, нужна ли нам JVM? Поскольку вместо JVM ОС может дать указание CPU выполнять эти машинные коды. Я здесь ошибаюсь?

Я хотел бы узнать больше от людей здесь. Пожалуйста, поправьте меня, если я ошибаюсь. Большое вам спасибо!

Ответ 1

Нам нужна ОС для всех вещей, которые программа C или С++. JVM делает еще несколько вещей по умолчанию, но не заменяет ничего, что делает ОС. Единственное различие может заключаться в том, что иногда у вас есть Your Code [вызывает] JVM [вызывает] OS, или с скомпилированным кодом вы можете иметь Your Code [вызывает] OS

Аналогично в С++ у вас может быть Your Code [вызывает] Boost [вызывает] OS.

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

Можно использовать обходные устройства/драйверы ядра с JNI, но Java напрямую не поддерживает эту функцию.

Ответ 2

Базовая база O/S по-прежнему должна делать почти все для JVM, не в последнюю очередь:

  • Ввод/вывод
  • Управление памятью
  • Создание потоков (при использовании собственных потоков)
  • Совместное использование времени, то есть разрешение нескольких процессов для запуска

и многое другое!

Ответ 3

Хорошо, я хочу сохранить это просто. Как вы закодированы в ZX Spectrum, то есть в старые времена, когда на самом деле вы не используете ОС (даже до эпохи DOS, в эпоху до ПК). Вы пишете свой код, и вам нужно управлять всем. Во многих случаях не было компилятора, поэтому ваша программа была интерпретирована.

Затем было осознано, что ОС - отличная вещь, и программы стали проще. Кроме того, компилятор использовался более широко. Например, я говорю о С++. В этих программах, если вам нужно позвонить в какую-то ОС, вы добавили необходимую библиотеку и сделаете свой звонок. Один из недостатков, когда это сейчас, ваша программа зависит от ОС, другая проблема заключалась в том, что ваши программы включают в себя OS DLL в некоторой фиксированной версии. Если другая программа на той же станции требовала, чтобы DLL в другой версии вы были в затруднении.

В первые дни истории JVM нет JIT-компилятора, где используется. Таким образом, ваша программа запускается в интерпретируемом режиме. Вашему приложению больше не нужно напрямую обращаться к ОС, вместо этого он использует JVM для всего, что ему нужно. JVM вместо этого перенаправляет некоторые вызовы приложений в ОС. Подумайте о JVM в качестве посредника. Одна из лучших особенностей JVM, где это универсальность. Вам, где не нужно придерживаться конкретной ОС (на практике вам нужно внести некоторые незначительные корректировки, если вы не придерживаетесь требования Java, когда ваша программа "иногда" работает в какой-то конкретной ОС, например, вы используете C:\для файлов или предположений при планировщике потоков, которые, как оказалось, являются истинными для текущей ОС, но, как правило, JVM не гарантируется.). Программисты JVM разрабатывают такой API, который может быть легко использован для Java-разработчика в одной руке, и с другой стороны можно будет сопоставить любые системные вызовы ОС.

JVM предоставляет вам более простую оболочку для ОС. Например, у него есть собственная модель памяти (синхронизация потоков), на которой у нее есть несколько недельных грантополучателей (она полностью переработана в JDK 1.5, потому что она была сломана). Он также имеет сбор мусора, он инициализирует переменные до нулевых значений (int i; я будет инициализирован до 0). Это JVM, помимо того, что является модератором ОС, действует как вспомогательный код для вашего собственного приложения.

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

В JDK 1.6 добавлена ​​еще одна оптимизация. Теперь некоторые объекты в некоторых случаях могут быть выделены в стеке, а не в куче. Я не знаю, может быть, это имеет некоторые побочные эффекты, но это пример того, что JVM может сделать для вас.

И мое последнее замечание. Когда вы компилируете свой код, что на самом деле происходит, ваша программа проверяется на синтаксическую правильность, а затем генерируется байт-код (файл .class). Язык Java использует подмножество существующих байтовых кодов (это было реализовано с помощью AOP, используя существующие байт-коды, которые не являются частью языка Java). Когда выполняется java-программа, эти байт-коды интерпретируются, они переводится "на лету" в машинные инструкции. Если JIT включен, некоторые из строк выполнения могут быть скомпилированы на машинный язык и повторно использованы вместо интерпретации "на лету".

Ответ 4

Мне кажется, что JVM "обходила" ОС и напрямую поручить процессору выполнить приложение. Если да, то зачем нам OS?

Все бинарные файлы C/С++ (а не только JVM) запускаются непосредственно на CPU. После запуска эти программы могут вызывать более машинный код, предоставляемый операционной системой, чтобы делать полезные вещи, такие как чтение файлов, запуск потоков или использование сети.

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

Так как это уже машинные коды, нужна ли нам JVM?

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

Ответ 5

Как мы знаем, OS не выполняет какую-либо программу, она предоставляет среду для процессора для выполнения, если мы говорим об окружающей среде, она выделяет файл с памятью Загрузка команды на процессор, управление адресом
загруженного метода обработки данных Процессора является только исполняющей программой. Это происходит в c или любом процедурном программировании. Язык, если мы видим, что ОС. Играет очень важную роль в этих накладных расходах на ОС. Потому что, если мы напишем небольшую простую программу в c, например, Hello World, которая содержит только одну главную функцию при компиляции, она генерирует файл .exe из более чем одной функции, которая берется из функции библиотеки, поэтому управлять всем по ОС - утомительная работа, поэтому в JVM предоставил Relief для ОС здесь работа ОС только для загрузите JVM с жесткого диска в RAM и сделайте jvm. Выполните и выделите пространство для JVM для выполнения java-программы здесь. Выделение Momery, загрузка файла байтового кода с жесткого диска, управление адресами, распределение памяти и де-распределение выполняется собственно JVM, поэтому ОС бесплатна, он может выполнять другие функции work.jvm allocate или Deallocate memory на основе того, что предоставила ОС для выполнения Java-программы.

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