Pull to refresh

Comments 4

В Java, как известно, inline-методов нет.

HostSpot JIT давно и успешно инлайнит методы. Настолько давно, что упоминание об этом было еще в документации для Solaris. Причем, это именно JVM, то есть потенциально это применяется ко всем языкам.

Возможно автор хотел выразить какую-то иную мысль, в этом случае надо бы данную фразу как-то переформулировать. Например, что нельзя заинлайнить отдельный конкретный метод? Или что javac этого не делает.
В [языке программирования] Java, как известно, inline-методов нет. 

Автор посчитал такую тавтологию излишней, так как то, что речь идёт о языковой конструкции уточняется в следующем же предложении.
Ну, я согласен что это терминологическая придирка (по большей части возражения к формулировке «как известно», без уточнения, кому известно и откуда очень часто ошибочной), но технология-то есть. И методы заинлайненные вполне можно продемонстрировать. Даже когда-то давно обсуждалось введение в OpenJDK аннотации Inline, но вроде отказались реализовывать. Видимо, JIT таки лучше знает, что инлайнить.
технология-то есть. И методы заинлайненные вполне можно продемонстрировать.

Разработчик этот процесс почти никак не контролирует, так что это не то же самое. Пользователь подкрутит параметры запуска JVM и всё пойдёт прахом.


Заинлайнены будут только те вызовы, которые JIT посчитает достаточно горячими и если при этом метод будет достаточно небольшим. И тут всё довольно шатко, любая пролетевшая мимо бабочка может изменить картину.


Как пример, одна из недавних регрессий: JDK-8300002


Ну и происходит это на уровне сгенерированного машинного кода, а не байткода.


Даже когда-то давно обсуждалось введение в OpenJDK аннотации @Inline, но вроде отказались реализовывать.

В Lombok это реализовывать не стали. Для OpenJDK такой JSR не нашёл.

Sign up to leave a comment.

Articles