Em qual idioma o compilador Java e a JVM são gravados?


195

Em quais idiomas são escritos o compilador Java ( javac), a máquina virtual (JVM) e o javainiciador?


23
i trabalhar em java, então eu quero saber sobre a língua ... :)
Rahul Garg

25
Digamos que você tenha trabalhado em alguma tecnologia por 20 anos e o entrevistador pergunte qual idioma está escrito ou como ele funciona. Você pode dizer que não se importa, significa que você só quer escrever, caso contrário, o idioma não quer para realmente entender a linguagem.
Rahul Garg

21
E mais, acho que o conhecimento nunca é desperdiçado. Então, saber algo não é perda de tempo.
Rahul Garg

1
... um engenheiro mecânico ou um piloto de corrida (para esticar a metáfora)
Epaga

2
@paxdiablo dirigir um carro é algo que você faz, mas não sua profissão. Motoristas de carros de corrida podem se importar com o funcionamento dos motores. Não estou dizendo que todos se importam ... mas se um motorista de carro de corrida quisesse saber mais sobre como o motor trabalhava no carro que ele é pago para dirigir, você acha que isso não é razoável?
JD Isaacks #

Respostas:


171

A formulação precisa da pergunta é um pouco enganadora: não é "a JVM" ou "o compilador", pois existem vários fornecedores de JVM (jrockit é um, IBM outro) e vários compiladores por aí.

  • A Sun JVM está gravada C, embora isso não precise ser o caso - a JVM conforme é executada em sua máquina é um executável dependente da plataforma e, portanto, poderia ter sido originalmente escrita em qualquer idioma. Por exemplo, o IBM JVM original foi escrito em Smalltalk

  • As bibliotecas Java ( java.lang, java.utiletc, geralmente chamadas de API Java ) são escritas em Java, embora os métodos marcados como nativetenham sido escritos em Cou C++.

  • Acredito que o compilador Java fornecido pela Sun também esteja escrito em Java. (Embora, novamente, haja vários compiladores por aí)


Eu acho que ele significa "java" o programa que você usa para iniciar uma JVM.
Stephen C

1
Na verdade, uma biblioteca no JRE da Sun é escrita no NetRexx. (É uma das bibliotecas matemáticas de precisão arbitrária, BigInteger, BigNum ou BigDecimal. Esqueci qual.) Em teoria, você poderia usar qualquer linguagem para implementar o JRE, desde que possa compilar com uma representação que um programa Java possa Compreendo.
Jörg W Mittag

18
Por favor, forneça uma referência para o Sun JVM sendo escrito em C.
Mohamed Bana

8
A JVM do HotSpot é escrita em C ++ - www2.research.att.com/~bs/applications.html
devdimi

5
@devdimi o link está quebrado e agora reside em: stroustrup.com/applications.html
flup

80

O primeiro compilador Java foi desenvolvido pela Sun Microsystems e foi escrito em C usando algumas bibliotecas do C ++. Hoje, o compilador Java é escrito em Java, enquanto o JRE é escrito em C.

Podemos imaginar como o compilador Java foi escrito em Java assim:

O compilador Java é escrito como um programa Java e, em seguida, compilado com o compilador Java escrito em C (o primeiro compilador Java). Assim, podemos usar o compilador Java recentemente compilado (escrito em Java) para compilar programas Java.


31
+1 para explicar como um compilador Java pode ser escrito em Java :)
Eduard Luca

2
Para esse processo de "atualização" para novos compiladores, compilando seu código em compiladores mais básicos é chamado "bootstrapping", como em "aprimorando-se pelos bootstraps", que é a origem da "inicialização" de uma máquina. Computerphile no YouTube tem um bom vídeo sobre isso e "diagramas T"
iono

Isso também responder ao problema galinha e do ovo :)
Skynet

@Skynet galinha auto-hospedada
sportzpikachu 18/04

65

Do Java Docs

O compilador é gravado em Java e o tempo de execução é gravado em ANSI C


1
Muito primeiro compilador Java desenvolvida pela Sun Microsystems foi escrito em C usando algumas bibliotecas de C ++ en.wikipedia.org/wiki/Java_compiler
Rahul Garg

4
Este é realmente um documento antigo (> 10 anos pela aparência). Por exemplo, ele diz "Bytecodes Java são traduzidos rapidamente para instruções nativas da máquina (interpretadas) e não são armazenadas em nenhum lugar", o que não ocorre há cerca de 5 anos!
Oxbow_lakes 03/08/09

2
Bem, desde quando a documentação está realmente atualizada, principalmente após grandes alterações? :)
Esko

Bem - a resposta não está realmente correta; a Sun JVM é escrita em C e o compilador Java da Sun é escrita em Java. A primeira IBM JVM foi escrita em Smalltalk.
Oxbow_lakes 03/08/09

8
O que compila o Java? Java. Bem, como você obtém o Java? Compile. Hã?


9

Esse link deve responder sua pergunta

Parece que o compilador agora está escrito em Java, mas o tempo de execução está escrito em ANSI C


8

Em princípio, quase tudo, geralmente C


3

O Jikes RVM , uma JVM auto-hospedada usada extensivamente para fins de pesquisa, é escrita em Java. Não é o único que as pessoas executam em seus desktops, mas está lá na minha lista de "agora vamos mostrar o poder geral do idioma".


São tartarugas todo o caminho ? Ele tem algum tipo de microkernel? Se sim, em que idioma está escrito?
Raedwald 21/07

3

Supondo que você esteja falando da JVM do Hotspot, que é o iirc fornecida pela Sun, ela está escrita em C ++. Para mais informações sobre as várias máquinas virtuais para Java, você pode verificar este link . O javac , como a maioria dos compiladores Java, é escrito em Java.


0
  • Quando o Java é introduzido pela Sun Microsystem, o compilador java foi escrito em C usando algumas bibliotecas do C ++.
  • Como existe um conceito no Design do compilador chamado Bootstapping, ele é usado principalmente no desenvolvimento do compilador, o Bootstrapping é o processo de escrever um compilador (ou assembler) na linguagem de programação de origem que ele pretende compilar. É usado para produzir um compilador auto-hospedado. O desenvolvimento de compiladores para novas linguagens de programação foi desenvolvido primeiro em um idioma existente e depois reescrito no novo idioma e compilado por ele mesmo. É por isso que hoje o compilador Java é escrito no próprio Java .
  • Java Virtual Machine: Java virtual machine é uma máquina abstrata. Como uma máquina de computação real, ela possui um conjunto de instruções e manipula várias áreas da memória em tempo de execução. Geralmente, a JVM interpreta o código de byte no código da máquina.

(Para obter mais informações, consulte este link: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.