Я получу выгоду с точки зрения памяти и скорости с JNI? - PullRequest
2 голосов
/ 20 апреля 2011

Я строю игровой сервер на Java. Работа в сети будет осуществляться JBoss Netty, и я подумал, что смогу немного повысить производительность и эффективность использования памяти, если использую JNI для вызова функций C ++, которые являются просто оболочками для ассемблерного кода (собранного с NASM), поэтому операции ввода-вывода будут выполняться. в сборке, а также обработки больших объемов данных. Есть ли какая-то выгода для этого подхода?

Ответы [ 2 ]

5 голосов
/ 20 апреля 2011

Функции ввода / вывода ограничены ОС, и сборка не ускорит ввод / вывод. Как и переключение на C ++ или переключение на любой язык более низкого уровня в целом.

Если вы хотите улучшить производительность, попробуйте избегая I / O.

2 голосов
/ 20 апреля 2011

Это от случая к случаю.Если между операциями ввода-вывода требуется огромное количество вычислений / процессов / доступа к памяти, то Java имеет менее эффективную реализацию, чем C ++, тогда ДА, вы определенно получите прирост производительности.Во многих случаях это действительно так.

Но подумайте внимательно, если выигрыш в производительности перевешивает вашу способность отлаживать этот определенный процесс.Будет очень трудно точно определить, где проблема, если она происходит внутри вашего вызова JNI.

Обычно на серверах важнее иметь возможность определить, в чем заключается проблема, и устранить ее, чем идти на крайние меры по повышению производительности, поскольку производительность сервера также можно легко получить с помощью дополнительного оборудования (более быстрые компонентыкластеризация и т. д.) в отличие от программ на стороне клиента, где вы часто зависаете с оборудованием по умолчанию.

...