Como o Java implementa operações de baixo nível?

Estava vendo a implementação do Java e vi que muitas operações ele implementa usando métodos nativos. Tipo, operações com arquivo, acesso ao OS etc. Nisso me surgiram duas dúvidas:
Primeiro, onde eu posso ver a implementação das funções nativas do Java?
Segundo, suponho que isso seja desenvolvido através de DLL’s. Por exemplo, quando eu chamo o método open() ou o método read () da classe FileInputStream, na verdade ele vai chamar implementações nativas para fazer isso. Na classe FileInputStream só existe o prototipo do método (perai: protótipo é coisa de C), sem implementação nenhuma. Então, na hora que o desenvolvedor chamar os referidos métodos, como será chamada a verdadeira implementação dos métodos?

Acho que o código pede para a JVM executar os métodos específicos, que ela sabe como faz…

Mas como eu consulto as implementações das funções nativas?

Acho que essas implementações estão na JVM, visto que podem ser diferentes para cada SO…

Sei, eu tô procurando o codigo-fonte de uma JVM para baixar mas não estou encontrando. Você teria algum link?

Não sei se o código dela é aberto… se for também não sei onde tem.

JAVA_HOME/jre/lib/386/*.so ?

Aqui nesse diretorio só tem um arquivo jvm.cfg

[quote=matheuslmota]Estava vendo a implementação do Java e vi que muitas operações ele implementa usando métodos nativos. Tipo, operações com arquivo, acesso ao OS etc. Nisso me surgiram duas dúvidas:
Primeiro, onde eu posso ver a implementação das funções nativas do Java?
Segundo, suponho que isso seja desenvolvido através de DLL’s. Por exemplo, quando eu chamo o método open() ou o método read () da classe FileInputStream, na verdade ele vai chamar implementações nativas para fazer isso. Na classe FileInputStream só existe o prototipo do método (perai: protótipo é coisa de C), sem implementação nenhuma. Então, na hora que o desenvolvedor chamar os referidos métodos, como será chamada a verdadeira implementação dos métodos?[/quote]

Para acessar os métodos nativos você pode usar JNI

http://javafree.uol.com.br/artigo/13913/JNI-Java-Native-Interface.html

As funções nativas estão implementadas em outras linguagens como C

[quote=André Fonseca][quote=matheuslmota]Estava vendo a implementação do Java e vi que muitas operações ele implementa usando métodos nativos. Tipo, operações com arquivo, acesso ao OS etc. Nisso me surgiram duas dúvidas:
Primeiro, onde eu posso ver a implementação das funções nativas do Java?
Segundo, suponho que isso seja desenvolvido através de DLL’s. Por exemplo, quando eu chamo o método open() ou o método read () da classe FileInputStream, na verdade ele vai chamar implementações nativas para fazer isso. Na classe FileInputStream só existe o prototipo do método (perai: protótipo é coisa de C), sem implementação nenhuma. Então, na hora que o desenvolvedor chamar os referidos métodos, como será chamada a verdadeira implementação dos métodos?[/quote]

Para acessar os métodos nativos você pode usar JNI

http://javafree.uol.com.br/artigo/13913/JNI-Java-Native-Interface.html

As funções nativas estão implementadas em outras linguagens como C[/quote]

Eu sei que usa JNI, mas o que eu não entendo é isso: digamos que eu tenha um pequeno programa. A única coisa que ele faz é ler o conteúdo de um arquivo e mostrar no console. A operação de leitura é implementada de forma nativa. Mas quem faz essa ligação entre a implementação nativa e o programa cliente?

Entendi, não sei como ele faz este binding

http://java.sun.com/docs/books/jvms/second_edition/html/ConstantPool.doc.html#74727

Você pode baixar o fonte do openjdk

http://download.java.net/openjdk/jdk7/

abs

Pelo que entendi então fica por conta da JVM tanto o binding como a implementação. Falei besteira?
Abs

A implementação é feita na linguagem nativa, o binding é feito pela JVM

Existem formas de você compilar o Java diretamente para o sistema operacional (http://gcc.gnu.org/java/) mas neste caso você estaria perdendo alguns dos “ganhos” do java como por exemplo aquele lema do “Write Once, Run Everywhere” ou seja, “escreva uma vez e rode onde quiser”

O java também tem uma coisa chamada de JIT compiler que facilita que o java não seja mais tão lento quanto ultimamente, existem bookmarks que mostram comparações entre código java e linguagens compiladas e o java chega até a ganhar de algumas linguagens compiladas em algumas situações

Tem mais informações no link abaixo
http://www.disordered.org/Java-JIT.html

abs