Различия в байт-коде Java, создаваемом компиляторами Oracle и Eclipse

Наш проект выполняет инструментарий Java байт-кода. И мы наткнулись на какое-то странное поведение. Предположим, следующий фрагмент кода:

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

Oracle javac компилирует вышесказанное в следующий байт-код:

   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

и компилятор Eclipse в:

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

Как видите, компилятор Oracle выдает «dup» после «new», тогда как Eclipse - нет. Что совершенно правильно в этом случае использования, поскольку вновь созданный экземпляр Integer вообще не используется, поэтому «dup» не требуется.

Мои вопросы:

Есть ли какой-то обзор различий между разными компиляторами? Статья / сообщение в блоге?Можно ли с уверенностью заключить, что если между «new» и «invokespecial» нет «dup», то объект не используется после инициализации?

Ответы на вопрос(3)

Ваш ответ на вопрос