JDK, JRE, Java: путаница версий!
Хотя я не настоящий Java-разработчик (пока), я чувствую, что уже должен знать об этом, но я все еще в замешательстве. Мой вопрос состоит из двух частей:
В чем разница между так называемыми (как я видел) "Sun JDK", OpenJDK и GCJ?
В разное время я видел, как разбрасывалось каждое из следующего, из-за чего было очень сложно понять, какие номера версий действительно применимы к чему. Может кто-нибудь помочь мне разобраться с этим?
- Java 6
- Java 1.6
- JDK 6
- JDK 1.6
- JRE 1.6
- JVM 11.0
Примечание: я понимаю разницу между JDK (Java Development Kit) и Java Runtime Environment. Однако я не совсем понимаю разницу между JRE и JVM, хотя знаю, что такое JVM.
5 ответов
- Sun JDK сделана Sun, OpenJDK - конкурирующая реализация с открытым исходным кодом. GCJ - это Java-компилятор GNU.
- Java 6 = Java 1.6 и JDK 6 = JDK 1.6
Детальная информация 1 http://en.wikipedia.org/wiki/OpenJDK https://stackru.com/questions/1977238/why-should-i-use-the-sun-jdk-over-the-openjdk-or-vice-versa
http://en.wikipedia.org/wiki/GNU_Compiler_for_Java
Как GCJ относится к Sun JDK/OpenJDK? Нет прямой связи, о которой я знаю. GCJ - это отдельный проект. Каковы преимущества использования одного JDK над другим? Могут возникнуть проблемы с лицензированием, если вы распространяете Sun JDK. Лично я больше доверяю Sun JDK из-за его стабильности. Разве OpenJDK не является проектом Sun? И да и нет. Это общественный проект.
Java 6 и Java 1.6 одинаковы. Первоначально Java назывался Java 1.X, но со временем маркетинг Sun обнаружил, что он будет лучше сигнализировать о существенных улучшениях, если они опустят "1" часть. Первой версией для этого была Java 1.5, которая продавалась как Java 5.
JRE 6 - это потребительский дистрибутив Java 6. Его легко скачать с http://java.com/.
JDK 6 - это дистрибутив Java 6. Он содержит такие инструменты, как компилятор, и поддерживает больше культур, чем стандартная JRE. Его необходимо загрузить с http://javasoft.com/.
JVM 11.0 - это версия "интерпретатора" Java внутри Oracle JRE/JDK (другие производители используют разные номера). Это похоже на то, что Windows Vista на самом деле является Windows 6.0.6001.
- Это в основном разные реализации одного и того же набора стандартов, которые описывают, как должна работать виртуальная машина Java.
- Управление версиями в Java происходило обычным образом с 1.0 до 1.4, когда какой-то умный маркетолог пришел с идеей назвать следующую версию "Java 5" вместо 1.5, но, конечно, это вызвало путаницу, которая перешла к 6 (1.6) и серия, вероятно, будет продолжаться еще некоторое время. Я понятия не имею, что JVM 11.0 может быть, хотя. (Вы уверены, что это не 1.1.0? Я знаю, что это длинный выстрел, но кто знает.)
И разница между JVM и JRE. Строго говоря, JVM - это просто машина, которая интерпретирует байт-код Java, в то время как JRE также содержит все стандартные библиотеки классов, файлы ресурсов, dll
с (so
с) и так далее.
За прошедшие годы Sun внесла некоторые изменения в соглашения об именах для своего языка программирования. Изначально у вас был jdk1.1 и так далее. На jdk1.2 они решили изменить это на Java 2. Итак, вы увидите несколько старых книг о Java 2.
Затем по какой-то таинственной причине он вернулся к jdk1.3, а затем к jdk1.4. Когда был выпущен jdk1.5, они приложили немало усилий, чтобы снова поменять имена. Итак, у нас была Java 5. Поскольку они решили придерживаться этого, у вас есть следующее:
jdk1.5 = Java 5
jdk1.6 = Java 6
jdk1.7 = Java 7
и (может быть) и так далее.
Надеюсь, это объясняет эту часть. В вашем вопросе Java6 == Java 1.6 == JDK 6 == JDK 1.6.
Что касается JVM против JRE. JRE содержит JVM, а также библиотеки классов и любые другие инструменты, необходимые для запуска вашей Java-программы. JVM - это просто программа, которая интерпретирует ваш байт-код и выполняет его на хост-компьютере.
Осторожно, GCJ не является сертифицированным JVM. Это проект GNU Classpath для Java, который имеет частичную совместимость с Java под лицензией GNU. Вам следует избегать этого, если вы не уверены, что он соответствует вашим потребностям, и у вас есть причина, по которой вы не можете использовать другую полную реализацию Java.