На каком языке написаны компилятор Java и JVM?


196

На каких языках написаны компилятор Java ( javac), виртуальная машина (JVM) и javaстартер?


23
Я работаю на Java, поэтому я хочу знать о языке ... :)
Рахул Гарг

26
Это ваша точка зрения. Допустим, вы работали над какой-то технологией в течение 20 лет, а интервьюер спрашивает вас, на каком языке она написана или как она работает, тогда вы можете сказать, что вам все равно, это означает, что вы просто хотите писать, если еще на языке не хотите чтобы действительно понять язык.
Рахул Гарг

22
и более того, я думаю, что знания никогда не пропадают даром. Зная, что-то не пустая трата времени.
Рахул Гарг

1
... инженер-механик или гонщик (чтобы растянуть метафору)
Epaga

2
@paxdiablo вождение автомобиля - это то, что вы делаете, но не ваша профессия. Водителей гоночных автомобилей может волновать, как работают двигатели. Я не говорю, что они все заботятся ... но если бы гонщик хотел узнать больше о том, как двигатель работал на машине, за которую ему платят, ты бы подумал, что это неразумно?
Джей Ди Айзекс

Ответы:


173

Точная формулировка вопроса немного вводит в заблуждение: это не «JVM» или «компилятор», поскольку существует несколько поставщиков JVM (один Jrockit, другой IBM) и несколько компиляторов .

  • Sun JVM будет написано в C, хотя это не обязательно так - JVM , как она работает на вашем компьютере является платформо-зависимый исполняемый файл и , следовательно , может быть написана на любом языке. Например, оригинальная IBM JVM была написана на Smalltalk

  • Библиотеки Java ( java.langи java.utilт. Д., Часто называемые Java API ) сами написаны на Java, хотя методы, помеченные как nativeбудут написаны в Cили C++.

  • Я считаю, что компилятор Java, предоставляемый Sun, также написан на Java. (Хотя, опять же, есть несколько компиляторов)


Я думаю, что он имеет в виду "Java" программу, которую вы используете для запуска JVM.
Стивен С

1
На самом деле, одна библиотека в JRE Sun написана на NetRexx. (Это одна из математических библиотек произвольной точности, BigInteger, BigNum или BigDecimal. Я забыл, какая из них.) Теоретически, вы можете использовать любой язык для реализации JRE, если он может компилироваться в представление, которое может выполнять Java-программа. понять.
Йорг Миттаг

18
Пожалуйста, предоставьте ссылку на то, что Sun JVM написана на языке C.
Мохамед Бана,


5
@devdimi ссылка не работает и теперь находится по адресу: stroustrup.com/applications.html
flup 13.07.13

81

Самый первый Java-компилятор был разработан Sun Microsystems и был написан на C с использованием некоторых библиотек из C ++. Сегодня компилятор Java написан на Java, а JRE написан на C.

Мы можем представить, как Java-компилятор был написан на Java следующим образом:

Компилятор Java написан как программа Java, а затем скомпилирован с помощью компилятора Java, написанного на C (первый компилятор Java). Таким образом, мы можем использовать недавно скомпилированный компилятор Java (написанный на Java) для компиляции программ Java.


32
+1 за объяснение того, как Java-компилятор может быть написан на Java :)
Эдуард Лука

2
К сожалению, этот процесс «обновления» до новых компиляторов путем компиляции их кода в более базовые компиляторы называется «самозагрузкой», как и «подтягиванием себя при помощи самозагрузок», откуда и происходит «загрузка» машины. Computerphile на YouTube имеет хорошее видео об этом и "T-диаграммах"
iono

Означает ли это также решение проблемы курицы и яйца :)
Skynet

@Skynet - самодельный цыпленок
sportzpikachu

65

Из документов Java

Компилятор написан на Java, а среда выполнения написана на ANSI C


1
Самый первый Java-компилятор, разработанный Sun Microsystems, был написан на C с использованием некоторых библиотек из C ++. En.wikipedia.org/wiki/Java_compiler
Рахул Гарг,

4
Это действительно довольно старый документ (> 10 лет на первый взгляд). Например, в нем говорится: «Байт-коды Java транслируются на лету в машинные инструкции (интерпретируются) и нигде не сохраняются», чего не было около 5 лет!
oxbow_lakes

2
Ну, а с каких это пор документация стала действительно актуальной, особенно после больших изменений? :)
Esko

Ну, ответ не совсем правильный; Sun JVM написана на C, а Java-компилятор Sun написан на Java. Первая IBM JVM была написана на Smalltalk.
oxbow_lakes

8
Что компилирует Java? Ява. Ну, как вы получаете Java? Скомпилируйте это. А?


9

Эта ссылка должна ответить на ваш вопрос

Кажется, что компилятор теперь написан на Java, но среда выполнения написана на ANSI C



3

Jikes RVM , JVM с самостоятельным размещением, широко используемая в исследовательских целях, написана на Java. Это не тот человек, который работает на своих рабочих столах, но в моем списке «теперь давайте покажем общую мощь языка».


Это черепахи внизу ? У него есть какое-то микроядро? Если да, то на каком языке это написано?
Raedwald

3

Предположим, вы говорите о Hotspot JVM, которая является iirc, предоставляемым Sun, она написана на C ++. Для получения дополнительной информации о различных виртуальных машинах для Java, вы можете проверить эту ссылку . javac , как и большинство компиляторов Java, написан на Java.


0
  • Когда Sun Microsystem представила Java , Java-компилятор был написан на C с использованием некоторых библиотек из C ++.
  • Поскольку в дизайне компилятора существует концепция, называемая Bootstapping, в основном она используется при разработке компилятора, Bootstrapping - это процесс написания компилятора (или ассемблера) на исходном языке программирования, который он предназначен для компиляции. Он используется для создания самодостаточного компилятора. Разработка компиляторов для новых языков программирования сначала разрабатывалась на существующем языке, а затем переписывалась на новом языке и компилировалась сама собой. Вот почему сегодня компилятор Java написан на самой Java .
  • Виртуальная машина Java : виртуальная машина Java является абстрактной машиной. Подобно реальной вычислительной машине, она имеет набор инструкций и манипулирует различными областями памяти времени выполнения. Обычно JVM интерпретирует байт-код в машинный код.

(Для получения дополнительной информации вы можете проверить эту ссылку: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.