Hacker News Digest

05 ноября 2025 г. в 10:11 • purplesyringa.moe • ⭐ 77 • 💬 4

OriginalHN

#java#jvm#exception-handling#decompilation#bytecode

JVM exceptions are weird: a decompiler perspective

Исследуя декомпиляцию Java-классов, автор обнаружил, что обработка исключений в JVM значительно сложнее обычного потока управления. В отличие от явных конструкций вроде if и while, которые реализуются через инструкции перехода, исключения обрабатываются неявно через отдельную "таблицу исключений". Эта таблица связывает регионы байткода с соответствующими обработчиками, очищает стек при исключении и передает управление обработчику.

Особую сложность представляют крайние случаи: регионы в таблице могут пересекаться без вложенности, а целевые обработчики могут находиться перед началом региона или даже внутри него. Реальные Java-файлы часто нарушают интуитивные предположения о структуре, что усложняет декомпиляцию. Особенно проблематичны конструкции try-finally, где finally-блок должен выполняться независимо от возникновения исключения, но должен знать, куда передать управление после завершения.