2012-02-10 2 views
2

Я планирую использовать Necessitas для вывода Qt-кода на платформу Android. На первый взгляд, я заметил, что, несмотря на то, что был родным кодом, все все еще проходит через Dalvik VM.Влияние Dalvik на производительность на языке C++?

Мой вопрос заключается в том, что это вводит накладные расходы? Java менее эффективен, чем исходный C++, и Dalvik довольно незрелый по сравнению с ванильной Java, что и является причиной моих проблем.

+0

Dalvik не имеет связи с Java во время выполнения. Retagged. –

+2

В JNI есть накладные расходы, но как только код работает, он работает на полной скорости. Dalvik VM является владельцем процесса приложения, но родной код работает изначально :) – BitBank

+0

@BitBank - спасибо, это было именно то, что я хотел знать, являются ли накладные расходы «единовременными» и «непрерывными», – dtech

ответ

5

В документации Android вы можете найти следующий совет:

Native код не обязательно более эффективным, чем Java. Во-первых, есть стоимость, связанная с Java-нативным переходом, и JIT не может оптимизировать эти границы. Если вы выделяете собственные ресурсы (память на нативной куче, файловые дескрипторы или что-то еще), может быть значительно сложнее организовать своевременный сбор этих ресурсов. Вам также необходимо скомпилировать свой код для каждой архитектуры , на которой вы хотите работать (а не полагаться на нее с JIT). Возможно, вам даже придется скомпилировать несколько версий для того, что вы считаете той же архитектурой: собственный код, скомпилированный для процессора ARM в , G1 не может в полной мере использовать преимущества ARM в Nexus One, а код , скомпилированный для ARM в Nexus One не будет работать на ARM в G1.

Грубый код Dalvik медленнее, чем чистый C/C++, оптимизированный для платформы. Но связь между собственным кодом и кодом Java происходит через JNI, который является основным источником накладных расходов.

Так что ответ на ваш вопрос - да, JNI вводит дополнительные накладные расходы. Но если вы хотите портировать существующий код C/C++, ndk - лучший выбор в вашем случае.

Смежные вопросы