Различия в производительности между сборниками VALA vs AOT?

Я разрабатываю приложение для обработки изображений на Java, но недавно меня заинтересовала VALA. Причина в том, что я считаю, что могу увеличить производительность приложения (моя забота в основном заключается во взаимосвязи с библиотеками C/C++, как кажется пример> что существует наказание за производительность при использовании мостов C/C++ в Java).

фон (что я знаю):

  • VALA переводится в код C, а затем его компилируется в a машинный код.
  • AOT (Java / Mono C#) также может создавать собственные машинные коды (вместо использования VMs, но по-прежнему требует пакета времени выполнения).
  • в некоторых случаях использование виртуальной машины, может быть даже быстрее, чем машинный код (так как он может быть оптимизирован с помощью JIT-компилятора).
  • потребляемые библиотеки C / C++ могут быть созданы с помощью VALA.

есть что-то, что происходит вокруг моей головы и я не могу найти ответ:

  1. можно ли создавать потребляемые библиотеки C / C++ с помощью компилятора AOT? (Думаю, нет).
  2. делает произведенный двоичный файл AOT, все еще имеет проблему производительности моста? (Думаю, так и есть).
  3. вызов библиотек C/C++ в VALA имеет ту же производительность, что и вызов их из C? (Думаю, так и есть).

1 ответов


1. Можно ли создавать потребляемые библиотеки C/C++ с помощью компилятора AOT?

Это не должно быть возможно, поскольку у нас нет заголовков, И это не строго класс C, который создает компилятор AOT, а просто машинный код.

(Примечание: классы Java могут быть вызывается внутри C / C++, но поскольку компиляторы AOT создают один двоичный файл, я уверен, что вы не можете получить доступ к своим классам Java извне этого файла).

ответ: Нет!--2-->

2. Производит ли двоичный файл AOT, все еще имеет проблему производительности моста?

во-первых, нам нужно знать: если вызов любого класса C/C++ из Java с помощью моста (например,JNI,javacpp и т. д.) всегда приведет к потере производительности?

по данным "W_" от ##java@irc.freenode.net:

Это зависит от того, как вы его вызываете (например, если аргументы должны быть преобразованные и такие). Звоню в библиотеку функции без каких-либо аргументов или возвращать преобразование типов не должно занимать никакого другого времени, чем в любом C app.

но поскольку я использую JavaCV в качестве моста для библиотеки OpenCV, он использует несколько типов объектов, которые, если это верно, это должно повлиять на производительность.

таким образом, может быть логично, что компиляция AOT может немного ускорить выполнение, но все равно должна пройти через мост и выполнить преобразование типов.

ответ: Да (но может быть немного быстрее)

3. Вызов библиотек C/C++ в VALA имеет ту же производительность, что и вызов их из C?

поскольку он преобразуется непосредственно в C, я не вижу причины, почему нет. Это было поддержано "nemequ" от #vala@irc.gimp.org:

в значительной степени, да. вала имеет привычку использовать временные переменные, но это именно то, что большинство компиляторов могут легко оптимизировать прочь. если вы используете gcc, pass-O2 и ты должна быть хорошей.

ответ: да

до сих пор я не знаю, почему "кто-то" проголосовал за закрытие моего вопроса, и он/она даже не потрудился прокомментировать это. Я думаю, что эти вопросы / ответы достаточно конструктивны (как pst commented), и они могут быть полезны для других людей, которые являются новыми для компиляторов VALA или AOT.

Если мои выводы не верны, поправьте меня.