Como o Java implementa operações de baixo nível?  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

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?

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
drigo.angelo
Virtual Machine Man
[Avatar]

Membro desde: 19/11/2009 12:17:08
Mensagens: 744
Localização: Uberlândia - MG
Offline

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

@drigoangelo

IE6 no more
[Email] [MSN]
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

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

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
drigo.angelo
Virtual Machine Man
[Avatar]

Membro desde: 19/11/2009 12:17:08
Mensagens: 744
Localização: Uberlândia - MG
Offline

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

@drigoangelo

IE6 no more
[Email] [MSN]
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

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

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
drigo.angelo
Virtual Machine Man
[Avatar]

Membro desde: 19/11/2009 12:17:08
Mensagens: 744
Localização: Uberlândia - MG
Offline

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

@drigoangelo

IE6 no more
[Email] [MSN]
Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

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

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

Rafael Nunes wrote:JAVA_HOME/jre/lib/386/*.so ?


Aqui nesse diretorio só tem um arquivo jvm.cfg

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
André Fonseca
JWizard
[Avatar]

Membro desde: 23/02/2007 15:52:55
Mensagens: 2034
Offline

matheuslmota wrote: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?


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

Você é novo no GUJ?


Como fazer perguntas?



www.twitter.com/_afonseca
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

André Fonseca wrote:
matheuslmota wrote: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?


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


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?

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
André Fonseca
JWizard
[Avatar]

Membro desde: 23/02/2007 15:52:55
Mensagens: 2034
Offline

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

Você é novo no GUJ?


Como fazer perguntas?



www.twitter.com/_afonseca
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

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

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
André Fonseca
JWizard
[Avatar]

Membro desde: 23/02/2007 15:52:55
Mensagens: 2034
Offline

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

Você é novo no GUJ?


Como fazer perguntas?



www.twitter.com/_afonseca
André Fonseca
JWizard
[Avatar]

Membro desde: 23/02/2007 15:52:55
Mensagens: 2034
Offline

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

Você é novo no GUJ?


Como fazer perguntas?



www.twitter.com/_afonseca
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team