Многоуровневые шаги, предоставленные Oracle:
Мне кажется, что ...
Я не буду определять. контекст вызовов) ... до на самом деле происходит инлингация. это.
Итак, я бы предположил, что независимое изолированное профилирование происходит на уровне метода, что в конечном итоге приводит к изолированным оптимизациям ... до , имея право на внедрение. JIT работает/оптимизирует на основанной на контексте . сначала .
Реальная разница будет:
Профилирование/оптимизация:
[*] сверху вниз?
или снизу вверх? /> < /ul>
Теперь ... Я не нашел более детального объяснения ... но я бы предположил, что «INLINING» Шаг является частью процесса C1 или C2.
, но, возможно, оптимизация, такие как Устранение мертвой ветви < /strong> также является частью C1 и C2, так как они могут возникнуть непосредственно на уровне подхода. Вставка ... не «прямой вызов», который был бы классифицирован как девиртуализация ... но не внедряющий для перспективы.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 выполняет оптимизацию «сверху вниз» ... Устранение мертвого ветви будет сделано после Inlining.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