Otimização do código

Amigos, gostaria de saber como otimizar o código e quando o compilador ou a JVM o faz por nós.
exemplo:

for(int i=0, i<obj.getLength(), i++) {
   OutroObj outroObj = new OutroObj();
   int j = outroObj.getValue;

   ... mais código usando j ...
}

Digamos que obj.getLength() retorne sempre o mesmo resultado - 10000 e não seja curto suficiente para o compilador torna-lo inline,
faz difirença se eu fizer assim? :

int j;
int l = obj.getLength();
OutroObj outroObj = new OutroObj();

for(int i=0, i<l, i++) {
   j = outroObj.getValue;

   ... mais código usando j ...
}

e se outroObj.getValue também retorne sempre o mesmo resultado, alguem remove o loop?

Enfim, sabemos que o JVM faz muita otimização, mas quais e como?

http://www.guj.com.br/posts/list/15/31346.java#989991

ViniGodoy,
Desde já agradeço a dica, e dei uma olhada no Goetz, mas não encontrei exatamente o que queria,

simplificando, minha dúvida é quando a JVM ou compilador faz otimizações sozinho, de modo que o programador não precise se preocupar, e possa escrever um código mais legível?

abraço