222
votes

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

9
i work on java so i want to know about the language...:) - Rahul Garg
Its your perspective.Lets say u worked on some technology for 20 years and interviewer ask you what language it is written or how it work then you can say you don't care it means you just want to write if else in the language not want to really understand the language. - Rahul Garg
and more over i think knowledge is never wasted.So knowing something is not waste of time. - Rahul Garg
...a mechanical engineer or a race driver (to stretch the metaphor) - Epaga
@paxdiablo driving a car is something you do, but not your profession. Race car drivers might care how engines work. I am not saying they all care.. but if a race car driver wanted to know more about how the engine worked on the car he is paid to drive, would you think that is unreasonable? - JD Isaacks

9 Answers

182
votes

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)

115
votes

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.

69
votes

From Java Docs

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

18
votes

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/

10
votes

In principle almost anything, usually C

10
votes

This link should answer your question

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

3
votes

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."

3
votes

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.

3
votes
  • 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/)