LINUX.ORG.RU

История изменений

Исправление stevejobs, (текущая версия) :

Такие инлайны ещё как возможно.

Самый простой способ, как делать это с zero overhead - это сделать компиляторную интринсику, которая будет кэпчурить вызов метода и подменять его на нативный код. Если совсем упороться, то можно попарсить .java-файл, выдернуть оттуда конструкции типа __asm(«строка с кодом») и автоматически вливать их в интринсики. Года эдак два я писал про это на ЛОРе в рамках шуточного поста «java с ассемблерными вставками».

Но одновременно этот способ самый сложный, т.к. а) требует поддерживать пересобранную версию JDK (5-20 минут сборки в зависимости от железа, нужно развести девопс-активность). б) это получается статический код, а хотелось бы динамически, типа как в libjit

Возможность таких инлайнов, скорей всего, появится в рамках проекта Valhalla, и будет выглядеть так же как в C# - собираем код асмом, кладём его в бинарь в managed памяти, берём ссылку на него как метод. Но сейчас этого нет, и разбираться в Вальгалле некогда.

В принципе, не вижу проблем чтобы сделать это и без участия гур из Вальгаллы. И надеялся, что кто-то уже всё это сделал :) Мало ли на земле добрых людей...

Исправление stevejobs, :

Такие инлайны ещё как возможно.

Самый простой способ, как делать это с zero overhead - это сделать компиляторную интринсику, которая будет кэпчурить вызов метода и подменять его на нативный код. Если совсем упороться, то можно попарсить .java-файл, выдернуть оттуда конструкции типа __asm(«строка с кодом») и автоматически вливать их в интринсики. Года эдак два я писал про это на ЛОРе в рамках шуточного поста «java с ассемблерными вставками».

Но одновременно этот способ самый сложный, т.к. требует поддерживать пересобранную версию JDK. Тащить со своим софтом свой JDK - не проблема, проблема что любое изменение интринсик ведёт к полной переборке JDK, это долго (5-20 минут в зависимости от железа) и больно, и требует всякого девопса на эту тему (когда пересобирается проект на Дженкинсе - пересобирается и его JDK, каждая версия софта должна быть строго синхронизирована со своим JDK, и так далее)

Возможность таких инлайнов, скорей всего, появится в рамках проекта Valhalla, и будет выглядеть так же как в C# - собираем код асмом, кладём его в бинарь в managed памяти, берём ссылку на него как метод. Но сейчас этого нет, и разбираться в Вальгалле некогда.

В принципе, не вижу проблем чтобы сделать это и без участия гур из Вальгаллы. И надеялся, что кто-то уже всё это сделал :) Мало ли на земле добрых людей...

Исходная версия stevejobs, :

Такие инлайны ещё как возможно.

Самый простой способ, как делать это с zero overhead - это сделать компиляторную интринсику, которая будет кэпчурить вызов метода и подменять его на нативный код. Если совсем упороться, то можно попарсить .java-файл, выдернуть оттуда конструкции типа __asm(«строка с кодом») и автоматически вливать их в интринсики. Года эдак два я писал про это на ЛОРе в рамках шуточного поста «java с ассемблерными вставками».

Но одновременно этот способ самый сложный, т.к. требует поддерживать пересобранную версию JDK. Тащить со своим софтом свой JDK - не проблема, проблема что любое изменение интринсик ведёт к полной переборке JDK, это долго (5-20 минут в зависимости от железа) и больно.

Возможность таких инлайнов, скорей всего, появится в рамках проекта Valhalla, и будет выглядеть так же как в C# - собираем код асмом, кладём его в бинарь в managed памяти, берём ссылку на него как метод. Но сейчас этого нет, и разбираться в Вальгалле некогда.

В принципе, не вижу проблем чтобы сделать это и без участия гур из Вальгаллы. И надеялся, что кто-то уже всё это сделал :) Мало ли на земле добрых людей...