Pesquisar

sábado, 30 de agosto de 2008

Inteligência e otimização direto no compilador Java javac

Java há muito tempo não é vista como uma plataforma computacional lenta. Parte da "nova rapidez" foi conseguida através da evolução do interpretador e do compilador java.
Os esforços e as características contidas no núcleo do interpretador e do compilador (java.exe e javac.exe), a cada nova versão, na maioria das vezes não é visto pelo desenvolvedor.

Vou apresentar um exemplo interessante (ao menos eu achei :D ):
A seguinte classe implementa a idéia da execução de um código de máquina...
public class Cpu6502{
private final static boolean isDebug = true;

public void execute(){
while(true){
int opcode = memoria[PC++];
switch (opcode){
case NOP:
log("nop executado");
break;
case ANDI:
log("and immediate executado");
...
case default:
log("opcode não suportado " + opcode);
break;
}


}

System.out.println("Fim");
}


private void log(String msg){
if (isDebug) System.out.println("6502 Debug > " + msg);
}
}


Até agora nada de novo, é necessário saber quais opcodes ainda não estão implementados ... mas e quando quisermos "tirar o pesso da saída padrão"? Basicamente é só mudar o valor do campo isDebug pra false. Ainda nenhuma novidade!!!

Realmente não há nenhuma novidade visível, veja o que o compilador javac faz quando compilamos a classe com o campo isDebug = false: (pra decompilar usei o Jode)

public class Cpu6502{
private final static boolean isDebug = false;

public void execute(){
while(true){
int opcode = memoria[PC++];
switch (opcode){
case NOP:
log("nop executado");
break;
case ANDI:
log("and immediate executado");
...
case default:
log("opcode não suportado " + opcode);
break;
}


}

System.out.println("Fim");
}


private void log(String msg){

}
}


O compilador viu que esse código nunca seria executado, dado as características do campo isDebug=false(final), então o compilador retira esse bloco... Esperto esse javac não!?
Só pra finalizar, acredito que o java.exe vê que o bloco não faz nada e simplesmente ignora-o. Esses são aqueles tipos de maravilhas invisíveis ao olho do desenvolvedor.

ps: Isso pra não citar o HotSpot... simplesmente fantástico!

Nenhum comentário: