Наш проект выполняет инструментацию байткода Java. И мы наткнулись на странное поведение. Предположим, следующий фрагмент кода:
public void a() {
new Integer(2);
}
Oracle's 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" не требуется.
Мои вопросы: