jpoint JPoint 2016 (22.04.2016 — 23.04.2016)

Escape analysis and scalarization

img

Escape analysis и scalar replacement появились в Java еще в версии 1.6, а их включение действительно может заметно снизить нагрузку на GC. Но вот надежного понимания, в каких конкретных участках кода на скаляризацию можно положиться, а в каких — нет, у нас за эти годы так и не сложилось. В сети можно найти массу историй успеха в духе «а вот в таком коде совсем-совсем нет аллокаций!», приведенный код часто оказывается очень хрупким: иногда достаточно поправить одну-две строчки, как все волшебство исчезает.

Данный доклад — попытка привнести больше понимания в этот вопрос. Руслан кратко опишет сам алгоритм escape-анализа и его врожденные ограничения. На примерах будут рассмотрены ограничения реализации его в JIT-компиляторе.