2014-02-20 4 views
3

После моего глубокого анализа я понимаю, как я разбираюсь в JDK, JRE и JVM. Пожалуйста, поправьте меня, если я ошибаюсь ...Мое понимание JDK, JRE и JVM

  1. JVM является подмножеством JRE, JRE является подмножеством JDK.
  2. JVM используется для преобразования байтового кода (* .class) в код объекта (машинный код) с использованием JRE.
  3. У JRE есть операционная система (ОС), которая задает DLL, которая используется JVM для кода байта для преобразования кода объекта.
  4. Если предполагается, что завтра, если какая-либо новая ОС запустится, имеющиеся в настоящее время JRE могут не поддерживать JVM для байтового кода для преобразования машинного кода. Поэтому JRE может потребоваться усилить поддержку новой будущей ОС.
  5. Итак, из приведенного выше моего анализа я заключу, что JVM является общим для всех ОС, но JRE имеет OS-специфическую DLL, которая будет использоваться JVM во время байтового кода для преобразования объектного кода.
+0

Можете ли вы отформатировать это, чтобы его было немного легче читать? – jgitter

+3

Вот документ, не нужно анализировать, просто прочтите http://docs.oracle.com/javase/7/docs/ – Vitaly

+0

. Кажется, вы одержимы «преобразованием байтового кода в преобразование объектного кода». Но JVM не нужно делать это для выполнения программ байт-кода, что является их единственной задачей. – Ingo

ответ

5

Вы здесь очень много. Я просто предлагаю следующее:

JVM является подмножеством JRE, JRE является подмножеством JDK.

Это достаточно справедливо. JVM (Java Virtual Machinve) входит в JRE (Java Runtime Environment) для запуска байт-кода (файлы .class). JRE включен, если вы загружаете весь JDK (Java Development Kit), который также включает инструменты разработки, такие как компилятор.

JVM используется для преобразования байтового кода (* .class) в код объекта (машинный код) с использованием JRE.

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

У JRE есть операционная система (ОС), указывающая DLL, которая используется JVM для преобразования кода байта в код объекта.

JVM при выполнении байтового кода имеет компилятор JIT (точно в момент времени), который превращает байт-код с платформой-агностиком в машинный код платформы. В Windows это будет включено в DLL, да. Также в JRE включены ОС-специфические реализации собственных методов, таких как те, которые указаны в java.lang.Object.

Если предполагается, что завтра, если какая-либо новая ОС запустится, имеющиеся в настоящее время JRE могут не поддерживать JVM для байтового кода для преобразования машинного кода. Поэтому JRE может потребоваться усилить поддержку новой будущей ОС.

Да, для новой операционной системы потребуется встроенная реализация JVM. Однако вы можете скомпилировать OpenJDK на этой новой ОС.

Итак, из приведенного выше моего анализа я заключу, что JVM является общим для всех ОС, но JRE имеет OS-специфическую DLL, которая будет использоваться JVM во время байтового кода для преобразования объектного кода.

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

+0

ATG, Понял, спасибо – Pandian

2

JVM виртуальный, вы можете думать об этом как о виртуальном компьютере, машинным кодом которого является байт-код Java. Это не настоящий компьютер, а виртуальный, который может выполнять инструкции по байт-коду Java.

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

JDK - это компилятор, JRE, другие инструменты и все Java-API, которые вам нужны для написания кода Java.

Я не хочу добавлять Android и его Dalvik VM к картинке (хотя я могу нарисовать интересные параллели), так как я буду вас путать больше, я думаю.

+0

JVM - это не абстрактная машина, она виртуальная. Следовательно, виртуальная машина. Абстрактную машину можно найти в академических кругах. –

+0

yes ok;) вот что я в основном имел в виду –

+0

Официальное определение состоит в том, что JRE также включает API Java SE. Это не просто JVM. – Radiodef

0

JVM это процесс, который запускается java.exe или javaw.exe, который существует под бен папку JRE. JRE - это набор необходимых двоичных файлов для запуска процесса Java. JRE - это не только специфичная для ОС, но и специфическая архитектура.

1

Опишем его:

JVM: Java Virtual Machine. Это, в основном, приложение, двоичное, которое зависит от ОС. Этот двоичный файл считывает файлы .class и интерпретирует байт-код или компилирует его на машинный код и выполняет его.

Java API: Это много кода для программистов. Основные функции, такие как HashSets, List и т. Д. Некоторые из этого кода могут быть специфичными для ОС, например. java.lang.Math. Большая часть его независима и сохранена как Bytecode

JRE: Java Runtime Environment представляет собой набор JVM, Java API и некоторые утилиты. Полный комплект является специфичным для ОС. Он ориентирован на людей, которые хотят, чтобы запустить Java-приложений

JDK: Комплект разработчика Java является JRE плюс компилятор (источник байткод) и инструментов, необходимых для разработки Java-приложений

  1. да
  2. нет, все это делается с помощью виртуальной машины Java, в первую очередь
  3. нет, JVM и JRE содержат OS-специфические детали
  4. да
  5. нет

Если вы говорите о JRE/JDK, вы не должны размещать его на уровне JVM.

+0

Absurd-Mind: Вы имеете в виду, что JVM - это двоичный файл, который является частью JRE, и это конкретная ОС? и вы имеете в виду, что есть пакет JRE (JVM + API + Utilities) для ОС? – Pandian

+0

Да, поскольку JVM является двоичным, он специфичен для ОС/архитектуры, а также JRE, поскольку он содержит JVM, двоичные утилиты и части Java-API, которые являются родными. –

0

http://docs.oracle.com/javase/7/docs/technotes/guides/index.html#jre-jdk

JRE и JDK Oracle предлагает два основных программных продуктов в Java ™ Platform, Standard Edition семейство (Java ™ SE):

Java SE Runtime Environment (JRE)

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

Kit Java SE Development (JDK)

JDK включает в JRE плюс командной строки средства разработки, такие как компиляторы и отладчики, которые необходимы или полезны для разработки апплетов и приложений.

Java Virtual Machines

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

Часто JVM и реализация JVM используются взаимозаменяемо. Это приемлемо, когда все стороны понимают этот факт.

+0

Vitaly: Из вашего сообщения я не совсем понимаю JVM, пожалуйста, предоставьте мне более подробную информацию. – Pandian

+0

В нем четко сказано, что JVM - это абстрактная вещь, это модель. JRE обеспечивает реализацию JVM. На этом уровне больше деталей не требуется. Если вы хотите узнать больше о JVM, то это его спецификация http://docs.oracle.com/javase/specs/jvms/se7/html/ – Vitaly

Смежные вопросы