Якою мовою написані компілятор Java та JVM?


196

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


23
Я працюю над Java, тому я хочу знати про мову ... :)
Рахул Гарг

26
Її ваша перспектива. Скажімо, ви працювали над якоюсь технологією протягом 20 років, і інтерв'юер запитає вас, якою мовою вона написана або як вона працює, тоді ви можете сказати, що вам все одно, це означає, що ви просто хочете писати, якщо іншою мовою не хочеться дійсно зрозуміти мову.
Рахул Гарг

22
і багато іншого, я думаю, що знання ніколи не витрачаються. Отже, знаючи щось - це не марна трата часу.
Рахул Гарг

1
... інженер-механік або гонщик (щоб розтягнути метафору)
Епага

2
@paxdiablo за кермом автомобіля - це те, що ти робиш, але це не твоя професія. Водіїв гоночних автомобілів може хвилювати, як працюють двигуни. Я не кажу, що їх все хвилює .. але якби водій гоночного автомобіля хотів дізнатися більше про те, як працював двигун на машині, йому платять за кермо, ви вважаєте, що це нерозумно?
JD Isaacks

Відповіді:


172

Точне формулювання питання трохи вводить в оману: це не "JVM" чи "компілятор" оскільки є кілька постачальників JVM (jrockit - один, IBM - інший) та кілька компіляторів .

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

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

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


Я думаю, що він означає "java" програму, яку ви використовуєте для запуску JVM.
Stephen C

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

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

8
JVM HotSpot написаний на C ++ - www2.research.att.com/~bs/applications.html
devdimi

5
@devdimi посилання розірвано і тепер знаходиться за адресою: stroustrup.com/applications.html
flup

81

Найперший компілятор Java був розроблений компанією Sun Microsystems і був написаний на C, використовуючи деякі бібліотеки з C ++. Сьогодні компілятор Java написаний на Java, тоді як JRE - у C.

Ми можемо уявити, як компілятор Java був написаний на Java так:

Компілятор Java пишеться як програма Java, а потім компілюється з компілятором Java, написаним на C (перший компілятор Java). Таким чином, ми можемо використовувати щойно складений компілятор Java (написаний на Java) для компіляції програм Java.


32
+1 для пояснення того, як компілятор Java може бути написаний на Java :)
Eduard Luca

2
fyi цей процес "оновлення" до нових компіляторів шляхом компіляції їх коду в більш базові компілятори називається "завантажувальним", як у "підтягуванні себе за допомогою завантажувальних програм", звідки походить "завантаження" машини. Computerphile на YouTube є гарне відео про це і «Т - діаграми»
Iono

Чи це також відповідає проблемі з куркою та яйцями :)
Skynet

@Skynet з власноруч куркою
sportzpikachu

65

Від Java Docs

Компілятор написаний на Java, а час виконання - ANSI C


1
Перший компілятор Java, розроблений компанією Sun Microsystems, був написаний на C, використовуючи деякі бібліотеки з C ++ en.wikipedia.org/wiki/Java_compiler
Рахул Гарг

4
Це дійсно досить старий документ (> 10 років за виглядом речей). Наприклад, в ній сказано: "Байт-коди Java перекладаються на льоту на інструкції до рідної машини (інтерпретуються) і не зберігаються ніде", що не було правдою вже близько 5 років!
oxbow_lakes

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

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

8
Що компілює Java? Java. Ну, як дістатися Java? Складіть його. Так?


9

Це посилання має відповісти на ваше запитання

Здається, компілятор зараз написаний на Java, але час виконання написано в ANSI C



3

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


Це черепахи аж донизу ? Чи є у нього якийсь мікроядер? Якщо так, то на якій мові написано цю мову?
Raedwald

3

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


0
  • Коли Java вводиться Sun Microsystem, компілятор java був написаний на C, використовуючи деякі бібліотеки з C ++.
  • Оскільки в дизайні компілятора існує концепція під назвою Bootstapping, вона в основному використовується в розробці компілятора, завантажувальна програма - це процес написання компілятора (або Assembler) на мові програмування, яка призначена для компіляції. Він використовується для створення компілятора, що займається хостингом. Розробка компіляторів для нових мов програмування спочатку розроблялася в існуючому мові, а потім переписувалася новою мовою та складалася сама. Ось чому сьогодні компілятор 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.