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