Возможный дубликат:
Что заставляет JNI звонить медленнее?
Сначала позвольте мне сказать, что эти вопросы рождаются больше из любопытства, чем настоящая необходимость.
Мне любопытно узнать, что накладные расходы на выполнение JNI-вызова из Java, скажем, System.arraycopy
по сравнению с распределением массива и копированием элементов с циклом for.
Если накладные расходы существенны, то, вероятно, есть приблизительное "магическое число" элементов, до которых он компенсирует просто использование цикла for, вместо использования системного вызова. А также, что именно участвует в системном вызове, который вызывает эти накладные расходы? Я предполагаю, что стек должен быть перенесен в контекст вызова, и это может занять некоторое время, но я не могу найти хорошее объяснение для всего процесса.
Позвольте мне уточнить мой вопрос:
Я знаю, что использование arraycopy - это самый быстрый способ скопировать массив в Java.
Чтобы сказать, что я использую его, чтобы скопировать массив только одного элемента. Поскольку я вызываю базовую ОС для этого, в этом вызове должны быть накладные расходы. Мне интересно узнать, что такое накладные расходы и что происходит в процессе вызова.
Прошу прощения, если использование arraycopy вводит вас в заблуждение с целью моего вопроса. Мне интересно узнать накладные расходы на вызов JNI и то, что связано с фактическим вызовом.