In which language are the Java compiler and JVM written?
Asked Answered
K

10

266

In which languages are the Java compiler (javac), the virtual machine (JVM) and the java starter written?

Knives answered 3/8, 2009 at 6:41 Comment(0)
A
214

The precise phrasing of the question is slightly misleading: it is not "the JVM" or "the compiler" as there are multiple JVM vendors (jrockit is one, IBM another) and multiple compilers out there.

  • The Sun JVM is written in C, although this need not be the case - the JVM as it runs on your machine is a platform-dependent executable and hence could have been originally written in any language. For example, the original IBM JVM was written in Smalltalk

  • The Java libraries (java.lang, java.util etc, often referred to as the Java API) are themselves written in Java, although methods marked as native will have been written in C or C++.

  • I believe that the Java compiler provided by Sun is also written in Java. (Although again, there are multiple compilers out there)

Advert answered 3/8, 2009 at 6:47 Comment(9)
I think he means "java" the program that you use to start a JVM.Smithsonite
Actually, one library in Sun's JRE is written in NetRexx. (It's one of the arbitrary precision math libraries, either BigInteger, BigNum or BigDecimal. I forgot which one.) In theory, you could use any language to implement the JRE, as long as it can compile to a representation that a Java program can understand.Gave
Please provide a reference to the Sun JVM being written in C.Proline
@JörgWMittag: I think this is not the case anymore since quite some editions of the JDK (I think 1.4 or even already 1.3). Now BigInteger is written in Java (and BigDecimal simply uses BigInteger internally).Numerator
The HotSpot JVM is written in C++ - www2.research.att.com/~bs/applications.htmlMarlomarlon
@Marlomarlon the link is broken and now resides at: stroustrup.com/applications.htmlLaurettelauri
Also, Java is Turing complete. So you can write a JVM in Java. But this is a purely academic exercise as it provides no benefit and only introduces complications.Syne
Good luck with that, cyotee. What would your JVM run on?Advert
@cyoteedoge GraalVM is more than a “purely academic exercise”. The advantages of using Java as implementation language are the same as for any other software (especially for complex software).Suitable
I
171

The very first Java compiler was developed by Sun Microsystems and was written in C using some libraries from C++. Today, the Java compiler is written in Java, while the JRE is written in C.

We can imagine how the Java compiler was written in Java like this:

The Java compiler is written as a Java program and then compiled with the Java compiler written in C(the first Java compiler). Thus we can use the newly compiled Java compiler(written in Java) to compile Java programs.

Isothere answered 21/7, 2013 at 17:9 Comment(10)
+1 for explaining how a Java compiler can be written in Java :)Humberto
fyi this process of "upgrading" to new compilers by compiling their code in more basic compilers is called "bootstrapping", as in "pulling yourself up by your bootstraps", which is where "booting" a machine comes from. Computerphile on YouTube has a good video about this and "T diagrams"Cultus
Does that also answer the chicken and egg problem :)Ectophyte
@Skynet self-hosted chickenVocalize
In theory, you dont' even need the bootstraping compiler. You can refer to the Java Language Specification and manually translate the Java Compiler code into bytecode(class file), hence bootstrapping. Though I only tried manually do that with a HelloWorld.Saltatory
Just clarifying, the JVM cannot be written in Java because Java needs JVM to run so if JVM-version2 was written in Java, it would have to run on JVM-version1, thus it would be a VM running on a VM.Diacid
@AritroShome Nothing is stopping you from running a VM on a VM. Of course, practically it would be incredibly slow, but you can still do it if you want. (You can't run a VM on itself, at least not on the latest version of itself. You would eventually have to reach a point when the VM runs on a compiled language.)Rifle
I see when it came to the JVM, they couldn't stomach the slowness of Java. I'm surprised they transitioned to Java for the compiler. Large systems might have benefited from a C-coded compiler.Diphenylhydantoin
The JVM cannot be sensibly written in java because it requires intimate knowledge of the underlying architecture to be effective.Paine
@Paine there is no contradiction between having “intimate knowledge of the underlying architecture” and being able to write Java code. Look at the GraalVM for an example of a JVM written in Java.Suitable
M
79

From Java Docs

The compiler is written in Java and the runtime is written in ANSI C

Mansoor answered 3/8, 2009 at 6:45 Comment(7)
Very first Java compiler developed by Sun Microsystems was written in C using some libraries from C++ en.wikipedia.org/wiki/Java_compilerKnives
This is really rather an old document (>10 years by the look of things). For example, it says "Java bytecodes are translated on the fly to native machine instructions (interpreted) and not stored anywhere" which has not been true for about 5 years!Advert
Well, since when has documentation been really up-to-date, especially after large changes? :)Censurable
Well - the answer isn't really correct; the Sun JVM is written in C, and the Sun java compiler is written in Java. The first IBM JVM was written in Smalltalk.Advert
What compiles Java? Java. Well, how do you get Java? Compile it. Huh?Switcheroo
@Switcheroo Not necessarily. You can translate Java code into bytecodes by hand if you would like to.Saltatory
@Saltatory In fact, the first programming languages must have been coded in 1s and 0s by hand. Hard to imagine with how far we've come.Diphenylhydantoin
F
20

Actually the Oracle JVM is written in C++, not C.

Take a look at the HotSpot JVM code here: http://openjdk.java.net/groups/hotspot/

Fescennine answered 29/2, 2012 at 22:36 Comment(0)
R
12

In principle almost anything, usually C

Ringmaster answered 3/8, 2009 at 6:44 Comment(0)
G
10

This link should answer your question

It seems the compiler is now written in Java, but the runtime is written in ANSI C

Gareth answered 3/8, 2009 at 6:45 Comment(0)
B
8
  • When Java was introduced by Sun Microsystem, the java compiler was written in C using some libraries from C++.
  • As there is a concept in Compiler Design called Bootstrapping, Mostly it is used in Compiler Development, Bootstrapping is the process of writing a compiler(Or Assembler) In the source programming language which it is intended to compile. It is used to produce a self-hosting compiler. The development of compilers for new Programming languages first developed in an existing language and then rewritten in the new language and compiled by itself. That's why today, Java compiler is written in Java itself.
  • Java Virtual Machine: Java virtual machine is an abstract machine. Like a real computing machine, It has an instruction set and manipulates various memory areas of runtime. Usually, JVM interprets the byte code into Machine code.

(For More Information You can check this link: https://docs.oracle.com/javase/specs/jvms/se7/html/)

Bowles answered 26/3, 2020 at 10:48 Comment(3)
amazing. especially the second bullet point.Birdie
The JVM might be a virtual machine that executes Java bytecode, but somewhere, it itself has to be coded in something.Diphenylhydantoin
Yes that's why I mentioned the concept of Bootstratpping here, you can refer the article to understand the concept geeksforgeeks.org/bootstrapping-in-compiler-designBowles
P
3

Jikes RVM, a self-hosting JVM used extensively for research purposes is written in Java. It's not the one people run on their desktops, but it's way up there on my list of "now let's show off the general power of the language."

Pastose answered 3/8, 2009 at 6:46 Comment(1)
It's turtles all the way down? Does it have some kind of microkernel? If so, what language is that written in?Calore
M
3

Supposing you're talking about the Hotspot JVM, which is iirc provided by Sun, it is written in C++. For more info on the various virtual machines for Java, you can check this link. javac, like most Java compilers, is written in Java.

Malvia answered 3/8, 2009 at 6:51 Comment(0)
B
-1

As always popular languages written in - C, C++.

Bort answered 7/11, 2022 at 15:23 Comment(2)
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.Stewpan
This does not provide an answer to the question. Once you have sufficient reputation you will be able to comment on any post; instead, provide answers that don't require clarification from the asker. - From ReviewBastardize

© 2022 - 2024 — McMap. All rights reserved.