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.
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.
+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 :)
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ã?
18
Na verdade, a Oracle JVM é escrita em C ++, não em C.
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.
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.
Respostas:
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 SmalltalkAs bibliotecas Java (
java.lang
,java.util
etc, geralmente chamadas de API Java ) são escritas em Java, embora os métodos marcados comonative
tenham sido escritos emC
ouC++
.Acredito que o compilador Java fornecido pela Sun também esteja escrito em Java. (Embora, novamente, haja vários compiladores por aí)
fonte
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.
fonte
Do Java Docs
fonte
Na verdade, a Oracle JVM é escrita em C ++, não em C.
Veja o código da JVM do HotSpot aqui: http://openjdk.java.net/groups/hotspot/
fonte
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
fonte
Em princípio, quase tudo, geralmente C
fonte
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".
fonte
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.
fonte
(Para obter mais informações, consulte este link: https://docs.oracle.com/javase/specs/jvms/se7/html/ )
fonte