У меня вопрос о оптимизации JIT. Я составил простой кусок кода:может JIT оптимизировать такой ненужный вызов?
class btest
{
static final boolean flag=false;
public final void foo(int x)
{
if(flag) {a=x; b=x*2; c=x*3;}
}
public void bar(int y) {foo(y);}
int a,b,c;
};
flag
установлен в false
так foo()
прекрасно компилируется в пустой код - просто возвращает. Но bar()
все еще называет это.
Возможно ли, что JIT устранит этот звонок? Имеет значение, если flag
принадлежит к внешнему классу?
рассматривает
Почему просто не финальный? Не являются ли конечные переменные более открытыми для указанной оптимизации? – hexafraction
@hexafraction Он будет делать это для примитивных конечных переменных и некоторых не конечных переменных. –
Итак, вы думаете, что лучше использовать условную компиляцию if-s, завернутую в методы (например, мой пример) вместо if-s на верхнем уровне, что менее удобно и, вероятно, менее изящно? – ardabro