Diferenças no bytecode java produzido pelos compiladores da Oracle e Eclipse

@Our projeto faz alguma instrumentação Java bytecode. E nos deparamos com algum comportamento estranho. Suponha o seguinte trecho de código:

  public void a() {
    new Integer(2);
  }

javac do Oracle compila o código acima no seguinte bytecode:

   0:   new #2; //class java/lang/Integer
   3:   dup
   4:   iconst_2
   5:   invokespecial   #3; //Method java/lang/Integer."<init>":(I)V
   8:   pop
   9:   return

e o compilador do Eclipse em:

   0:   new #15; //class java/lang/Integer
   3:   iconst_2
   4:   invokespecial   #17; //Method java/lang/Integer."<init>":(I)V
   7:   return

Como você pode ver, o compilador Oracle produz "dup" após "new", enquanto o Eclipse não. O que é totalmente correto nesse caso de uso, pois a instância Integer recém-criada não é usada, portanto, não é necessário "dup"

As minhas perguntas são:

Existe alguma visão geral das diferenças entre diferentes compiladores? Um artigo / postagem no blog?Posso concluir com segurança que, se não houver "dup" entre "new" e "invokespecial", o objeto não será usado após a inicializaçã

questionAnswers(6)

yourAnswerToTheQuestion