Vinicius Zibetti Resko:
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:
class testing{
public static void main(String[] args){
int x = 0, y = 0;
if(x == 0 && y < 1){
System.out.println("Verdade");
}
}
}
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:
add eax, edx
mov ecx, eax
O "assembler" Java (bytecode) gerado é bem diferente:
0 iload_1
1 iload_2
2 iadd
3 istore_3
Um exemplo mais real, código Java:
for (int i = 2; i < 1000; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0)
continue outer;
}
System.out.println (i);
}
Gerá esse bytecode:
0: iconst_2
1: istore_1
2: iload_1
3: sipush 1000
6: if_icmpge 44
9: iconst_2
10: istore_2
11: iload_2
12: iload_1
13: if_icmpge 31
16: iload_1
17: iload_2
18: irem
19: ifne 25
22: goto 38
25: iinc 2, 1
28: goto 11
31: getstatic #84; //Field java/lang/System.out:Ljava/io/PrintStream;
34: iload_1
35: invokevirtual #85; //Method java/io/PrintStream.println:(I)V
38: iinc 1, 1
41: goto 2
44: return
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.