Sobre JVM, como é o funcionamento de algumas coisas dentro dela ?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Vinicius Zibetti Resko
JavaTeenager
[Avatar]

Membro desde: 27/03/2011 19:29:50
Mensagens: 192
Localização: Taubaté-SP
Offline

Estou criando este tópico para discutirmos sobre JVM.
Eu tenho duvidas sobre como funciona a parte interna do jVM. Gostaria de saber por exemplo, como que o java interpreta este codigo:




A logica booleana AND ( E ) eu entendo mas como que o java interpreta o '==', '<' e '>' internamente, podem me falar sobre bits, eu entendo um pouco. Gostaria de saber juntamente como que o JVM acessa por exemplo a variavel x que eu declarei la em cima, e se por acaso eu sobrescrever-la, sendo x = 3, como é trocado estes valores binarios?
E vamos discutir também sobre este assunto, que julga ser bem interessante.


Obrigado !

This message was edited 2 times. Last update was at 28/04/2011 23:30:22


Aprendizado Básico Linguagem C++ ->OK
Aprendizado Intermediário Linguagem Java ->OK
Aprendizado Avançado Linguagem PHP ->OK
Aprendizado Intermediário Linguagem SQL ( PGSQL e MYSQL) ->OK
Aprendizado intermediário em estrutura de dados e algoritmos -> Correndo atrás sempre.
[WWW] [MSN]
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

A JVM é um conjunto de compiladores, coletores de lixo e mais algumas ferramentas.

O seu bytecode é utilizado pelo jit e a partir dele o mesmo é otimizado e compilado para assembly. Java não é mais interpretado hà anos.

www.citrox.com.br
Vinicius Zibetti Resko
JavaTeenager
[Avatar]

Membro desde: 27/03/2011 19:29:50
Mensagens: 192
Localização: Taubaté-SP
Offline

Caramba não tinha ideia q acontecia isto, mas da mesma forma, como que a Maquiina virtual faz aqulas operações e acessa variaveis que eu pgtei ali, alguem poderia me explicar mais ou menos?!


OBS: O que é um Jit ?!

This message was edited 1 time. Last update was at 29/04/2011 07:08:30


Aprendizado Básico Linguagem C++ ->OK
Aprendizado Intermediário Linguagem Java ->OK
Aprendizado Avançado Linguagem PHP ->OK
Aprendizado Intermediário Linguagem SQL ( PGSQL e MYSQL) ->OK
Aprendizado intermediário em estrutura de dados e algoritmos -> Correndo atrás sempre.
[WWW] [MSN]
Elizeu_Santos
Virtual Machine Man
[Avatar]

Membro desde: 01/08/2008 20:21:57
Mensagens: 670
Localização: RJ
Offline

eu não sabia disso. me tira uma duvida... quando o código é "compilado" para assembler?

JSF 2
EJB 3
Spring 3
Hibernate 4


"É um prazer puro da alma espalhar pelo mundo o fruto de seus estudos e meditações, ainda sem outra remuneração que a consciência de fazer bem."
José Bonifácio
dreampeppers99
Virtual Machine Man
[Avatar]

Membro desde: 29/08/2006 21:50:17
Mensagens: 523
Offline

Vinicius Zibetti Resko wrote:Estou criando este tópico para discutirmos sobre JVM.
Eu tenho duvidas sobre como funciona a parte interna do jVM. Gostaria de saber por exemplo, como que o java interpreta este codigo:




A logica booleana AND ( E ) eu entendo mas como que o java interpreta o '==', '<' e '>' internamente, podem me falar sobre bits, eu entendo um pouco. Gostaria de saber juntamente como que o JVM acessa por exemplo a variavel x que eu declarei la em cima, e se por acaso eu sobrescrever-la, sendo x = 3, como é trocado estes valores binarios?
E vamos discutir também sobre este assunto, que julga ser bem interessante.


Obrigado !


JVM é orientada a pilha diferentemente do jeitão "assembler" das coisas.
Imagine que um código escrito em C para plataforma x86 que gerá um assembler assim:

O "assembler" Java (bytecode) gerado é bem diferente:


Um exemplo mais real, código Java:


Gerá esse bytecode:

Para saber o que cada uma dessas instruções signficam visite http://java.sun.com/docs/books/jvms/second_edition/html/Overview.doc.html#7143

E pra te ajudar a entender melhor a especificação da VM!
Fonte: http://en.wikipedia.org/wiki/Java_bytecode

JIT irá ou não recompilar dinamicamente seu bytecode para dar um gâs na perfomance! Em tempo de execução ele percebe inteligentemente um código que pode ser otimizado ou reescrito para "assembler" e otmiza aquela parte tipo um translator, tais conjuntos de instruções podem ser descritas em x86 instruções. Mas o JIT é um passo além de um simples recompilador... isso tudo eu acho que funciona assim,não mando muito bem com VM a única vm que conheço é o chip8 rsrsr.

This message was edited 2 times. Last update was at 29/04/2011 07:23:22


- Não respondo dúvida por PM!
- Blog -> Software development - Clojure, Ruby, Java, Test and little pumpkins
- Blog - Desenvolvimento de software - Java
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Também é uma boa ler os artigos do Goetz:
http://www.briangoetz.com/pubs.html

Não fala exatamente sobre conversão do bytecode em código de máquina, porém, explica como funciona o garbage collector, sincronização e outros aspectos importantes da VM.

Vale lembrar também que cada VM pode conter otimizações específicas, para o local onde ela roda. Então, um mesmo bytecode pode ser compilado de N maneiras diferentes, desde que elas funcionem de maneira idêntica em cada plataforma.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Mikhas
Virtual Machine Man
[Avatar]

Membro desde: 17/06/2008 11:10:50
Mensagens: 677
Localização: São Paulo
Offline

Elizeu_Santos wrote:eu não sabia disso. me tira uma duvida... quando o código é "compilado" para assembler?


Acredito que quando a JVM determina que um metodo é chamado constantemente. O HotSpot (JVM da Sun/Oracle) tem um argumento que determina depois de quantas execuções um metodo é compilado para codigo nativo.

This message was edited 1 time. Last update was at 29/04/2011 08:34:38


Refractor 1.6 - Easy reflection framework
Agora muito mais rapido!
Raze - The fastest CSS selector engine




[Email] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Os artigos do Goetz que citei ali em cima também falam sobre a Hotspot compilation. Para quem não sabe, o Brian Goetz é um dos pais da linguagem Java.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

Elizeu_Santos wrote:eu não sabia disso. me tira uma duvida... quando o código é "compilado" para assembler?


O LLVM é um compilador e otimizador de assembly que está presente na maioria das máquinas virtuais que possuem um jit hoje.
http://llvm.org/


Os passos da execução de um programa java são.

1) Javac - sourcecode para bytecode
2) Hotspot e jit - compilação para assembly
3) llvm - otimização do assembly



Por isso o código java roda tão rápido como um c++.

Hoje a jvm é um cojunto de ferramentas, e incluso um compilador realmente muito poderoso, que gera código enxuto(Apesar de possuir alguns problemas claro).

www.citrox.com.br
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

Vinicius Zibetti Resko wrote:Caramba não tinha ideia q acontecia isto, mas da mesma forma, como que a Maquiina virtual faz aqulas operações e acessa variaveis que eu pgtei ali, alguem poderia me explicar mais ou menos?!


OBS: O que é um Jit ?!



O JIT(Just in Time) é um compilador dinâmico que consegue recriar o executável com base em estatísticas cedidas pelo hotspot. Isso quer dizer que a jvm pode melhorar o seu programa de tempos em tempos a medida que ele é executado

www.citrox.com.br
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

ViniGodoy wrote:Também é uma boa ler os artigos do Goetz:
http://www.briangoetz.com/pubs.html

Não fala exatamente sobre conversão do bytecode em código de máquina, porém, explica como funciona o garbage collector, sincronização e outros aspectos importantes da VM.

Vale lembrar também que cada VM pode conter otimizações específicas, para o local onde ela roda. Então, um mesmo bytecode pode ser compilado de N maneiras diferentes, desde que elas funcionem de maneira idêntica em cada plataforma.


Apenas o bytecode é padronizado. O assembly no final é referente a determinada arquitetura do hardware. Dá para imaginar a jvm de um grosso modo como um compilador inteligente e mantenedor de processos.

www.citrox.com.br
leandrokjava
JavaGuru
[Avatar]

Membro desde: 15/05/2007 18:35:14
Mensagens: 225
Localização: Porto Alegre-RS
Offline

Não sabia disso, achei que ainda era interpretado.

Isso explica muita coisa.

This message was edited 1 time. Last update was at 29/04/2011 12:15:55


www.softdevelop.com.br
[Email] [WWW] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

leandrokjava wrote:Não sabia disso, achei que ainda era interpretado.


Ainda que a VM interpretasse todo bytecode, não seria correto chamar o Java de linguagem interpretada. O termo mais correto seria linguagem mista.

Isto pq o assembly do bytecode é muito enxuto, praticamente não exige verificações que um compilador faria (sintáticas, semânticas e lexicas). Ele também tem um conjunto bastante reduzido de instruções, facilmente avaliaveis. É como se fosse um pseudo-código de máquina. Isso garante uma interpretação milhares de vezes mais rápida do que um interpretador faz numa linguagem diretamente, como é o caso do JavaScript ou do PHP.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Vinicius Zibetti Resko
JavaTeenager
[Avatar]

Membro desde: 27/03/2011 19:29:50
Mensagens: 192
Localização: Taubaté-SP
Offline

Nossa quanto conhecimento aqui hein...

Obrigado, eu consegui entender algumas coisa interessantes.

Aprendizado Básico Linguagem C++ ->OK
Aprendizado Intermediário Linguagem Java ->OK
Aprendizado Avançado Linguagem PHP ->OK
Aprendizado Intermediário Linguagem SQL ( PGSQL e MYSQL) ->OK
Aprendizado intermediário em estrutura de dados e algoritmos -> Correndo atrás sempre.
[WWW] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team