W jakim języku napisany jest kompilator Java i JVM?


195

W jakich językach jest napisany kompilator Java ( javac), maszyna wirtualna (JVM) i javastarter?


23
Pracuję na Javie, więc chcę wiedzieć o języku ... :)
Rahul Garg

26
To twoja perspektywa. Powiedzmy, że pracujesz nad jakąś technologią przez 20 lat, a ankieter pyta cię, w jakim języku jest napisany lub jak on działa, możesz powiedzieć, że cię to nie obchodzi, oznacza to, że po prostu chcesz pisać, jeśli w innym języku nie chcesz naprawdę zrozumieć język.
Rahul Garg

22
a co więcej, myślę, że wiedza nigdy się nie marnuje. Więc wiedza o czymś nie jest stratą czasu.
Rahul Garg

1
... inżynier mechanik lub kierowca wyścigowy (aby
rozwinąć

2
@paxdiablo prowadzenie samochodu to coś, co robisz, ale nie twój zawód. Kierowcy samochodów wyścigowych mogą dbać o to, jak działają silniki. Nie twierdzę, że wszyscy się tym przejmują ... ale jeśli kierowca wyścigowy chciałby dowiedzieć się więcej o tym, jak silnik pracował w samochodzie, za który płacił mu za kierowanie, czy uważasz, że to nieuzasadnione?
JD Isaacks,

Odpowiedzi:


171

Precyzyjne sformułowanie pytania jest nieco mylące: nie jest „JVM” ani „kompilator”, ponieważ istnieje wielu dostawców JVM (jrockit to jeden, IBM inny) i wiele kompilatorów .

  • Sun JVM jest napisany C, chociaż nie musi tak być - JVM działający na twoim komputerze jest wykonywalnym programem zależnym od platformy i dlatego mógł być pierwotnie napisany w dowolnym języku. Na przykład oryginalny IBM JVM został napisany w języku Smalltalk

  • Biblioteki Java (java.lang , java.utiletc, często określane jako Java API ) sami są napisane w Javie, chociaż metody oznaczone jako nativebędą zostały napisane w Club C++.

  • Wierzę, że kompilator Java dostarczony przez Sun jest również napisany w Javie. (Chociaż znowu istnieje wiele kompilatorów)


Myślę, że ma na myśli „java” program, którego używasz do uruchomienia JVM.
Stephen C

1
W rzeczywistości jedna biblioteka w środowisku JRE firmy Sun jest napisana w NetRexx. (Jest to jedna z bibliotek matematycznych o dowolnej precyzji, BigInteger, BigNum lub BigDecimal. Zapomniałem, która z nich.) Teoretycznie możesz użyć dowolnego języka do implementacji środowiska JRE, o ile można go skompilować do reprezentacji, którą program Java może Rozumiesz.
Jörg W Mittag

18
Proszę podać odniesienie do Sun JVM napisanego w C.
Mohamed Bana,

8
HotSpot JVM jest napisany w języku C ++ - www2.research.att.com/~bs/applications.html
devdimi

5
@devdimi link jest zepsuty i obecnie znajduje się pod adresem: stroustrup.com/applications.html
flup

81

Pierwszy kompilator Java został opracowany przez Sun Microsystems i został napisany w C przy użyciu niektórych bibliotek z C ++. Obecnie kompilator Java jest napisany w Javie, a środowisko JRE w C.

Możemy sobie wyobrazić, jak kompilator Java został napisany w Javie w następujący sposób:

Kompilator Java jest zapisywany jako program Java, a następnie kompilowany za pomocą kompilatora Java napisanego w C (pierwszy kompilator Java). W ten sposób możemy użyć nowo skompilowanego kompilatora Java (napisanego w Javie) do kompilacji programów Java.


32
+1 za wyjaśnienie, w jaki sposób można napisać kompilator Java w Javie :)
Eduard Luca

2
fyi ten proces „uaktualniania” do nowych kompilatorów poprzez kompilowanie ich kodu w bardziej podstawowych kompilatorach nazywa się „ładowaniem”, podobnie jak „wciąganie się za bootstrapy”, z którego pochodzi „ładowanie” komputera. Computerphile na YouTube ma dobre wideo na ten temat i „T diagramy”
iono

Czy to również rozwiązuje problem z kurczakiem i jajami :)
Skynet

@Skynet - gospodarz z kurczaka
sportzpikachu

65

Z dokumentów Java

Kompilator napisany jest w Javie, a środowisko wykonawcze w ANSI C.


1
Pierwszy kompilator Java opracowany przez Sun Microsystems został napisany w C przy użyciu bibliotek C ++ en.wikipedia.org/wiki/Java_compiler
Rahul Garg

4
To naprawdę stary dokument (z wyglądu 10 lat). Na przykład napisano: „Kody bajtowe Java są tłumaczone w locie na instrukcje natywnej maszyny (interpretowane) i nigdzie nie przechowywane”, co nie było prawdą przez około 5 lat!
oxbow_lakes

2
Od kiedy dokumentacja jest naprawdę aktualna, szczególnie po dużych zmianach? :)
Esko

Cóż - odpowiedź nie jest prawdziwa; Sun JVM jest napisany w C, a kompilator Sun Java jest napisany w Javie. Pierwszy IBM JVM został napisany w języku Smalltalk.
oxbow_lakes

8
Co kompiluje Javę? Jawa. Jak zdobyć Javę? Skompiluj to. Co?


9

Ten link powinien odpowiedzieć na twoje pytanie

Wygląda na to, że kompilator jest teraz napisany w Javie, ale środowisko wykonawcze jest napisane w ANSI C.



3

Jikes RVM , samodzielna JVM, szeroko wykorzystywana do celów badawczych, jest napisana w Javie. To nie jest jedna osoba, która działa na swoich komputerach, ale jest tam na mojej liście „teraz pokażmy ogólną moc języka”.


Żółwie są na dole ? Czy ma jakieś mikrojądro? Jeśli tak, w jakim języku to jest napisane?
Raedwald

3

Załóżmy, że mówisz o JVM Hotspot, który jest dostarczany przez Sun, napisany jest w C ++. Aby uzyskać więcej informacji na temat różnych maszyn wirtualnych dla Java, możesz sprawdzić ten link . javac , podobnie jak większość kompilatorów Java, jest napisany w Javie.


0
  • Kiedy Sun Microsystem wprowadza Javę, kompilator Java został napisany w C przy użyciu niektórych bibliotek z C ++.
  • Ponieważ w projekcie kompilatora istnieje koncepcja o nazwie Bootstapping, głównie jest ona wykorzystywana w rozwoju kompilatora, Bootstrapping to proces pisania kompilatora (lub asemblera) w źródłowym języku programowania, który ma zostać skompilowany. Służy do tworzenia kompilatora samoobsługowego. Opracowanie kompilatorów dla nowych języków programowania najpierw opracowano w istniejącym języku, a następnie przepisano w nowym języku i skompilowano samodzielnie. Dlatego dzisiaj kompilator Java jest napisany w samej Javie .
  • Wirtualna maszyna Java : wirtualna maszyna Java jest maszyną abstrakcyjną. Podobnie jak prawdziwa maszyna komputerowa, ma zestaw instrukcji i manipuluje różnymi obszarami pamięci w czasie wykonywania. Zazwyczaj JVM interpretuje kod bajtu w kod maszynowy.

(Aby uzyskać więcej informacji, możesz sprawdzić ten link: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.