Многоуровневыми шагами, предоставленными Oracle:
Мне кажется, что ... Я не могу принять вызов (я не могу принять на основе. Контекст), до того, как на самом деле произойдет инлингация. происходит на уровне метода, который в конечном итоге превращается в изолированные оптимизации, прежде чем иметь право на внедрение. Было бы, по крайней мере, некоторые вещи, которые могут быть оптимизированы без необходимости просмотра межметодного взаимодействия.
Если метод усовершенствован в изоляции, это было потому, что навес для вызовов потребовал его первым.
-это Profiling/optuizing:
/> сверху вниз? < /li>
или снизу вверх? Но, возможно, оптимизация, такие как устранение мертвой ветви, также является частью C1 и C2, поскольку они могут возникнуть непосредственно на уровне байт-кода. < /P>
путем инлин, я имею в виду фактическую вставку тела метода, а не «прямое вызов», которая была бы классифицирована как девиртуализация, но не привязанность Pre-se. Class = "Lang-Java PrettyPrint-Override">void extremelyHotPath() {
obj.something();
obj2.something();
obj3.something();
obj4.something();
obj5.something();
obj6.something();
}
// ---> obj scope
final boolean flag = false;
void doSomething() {
if (flag) throw new IllegalStateException();
}
Итак, если JIT выполняет оптимизацию «сверху вниз» ... Устранение условного постоянного распространения/устранения мертвого кода будет выполнена после внедрения.void extremelyHotPath() {
if (obj.flag) throw new IllegalStateException();
if (obj2.flag) throw new IllegalStateException();
if (obj3.flag) throw new IllegalStateException();
if (obj4.flag) throw new IllegalStateException();
if (obj5.flag) throw new IllegalStateException();
if (obj6.flag) throw new IllegalStateException();
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... tion-occur