Аналогичные API-интерфейсы native extension также присутствуют во многих других "языках виртуальных машин" по тем же причинам, например, Python, Node.js, Ruby.
Android NDK
Концепция в этом контексте точно такая же, за исключением того, что вы должны использовать Android boilerplate для ее настройки.
Официальный репозиторий NDK содержит "канонические" примеры, такие как приложение hello-jni:
В вашем unzip приложении .apk с NDK на Android O вы можете увидеть предварительно скомпилированный .so который соответствует машинному коду в разделе lib/arm64-v8a/libnative-lib.so.
Задача подтверждения: кроме того, file /data/app/com.android.appname-*/oat/arm64/base.odex говорится, что это разделяемая библиотека, которая, я думаю, является предварительно скомпилированным AOT .dex, соответствующим файлам Java в ART, смотрите также: Что такое файлы ODEX в Android? Так, может быть, Java на самом деле также запускается через native интерфейс?
Пример в OpenJDK 8
Давайте найдем, где Object#clone определено в jdk8u60-b27.
Мы придем к выводу, что оно реализовано с помощью native вызова.
После расширения набора макросов мы приходим к выводу, что это точка определения.
Ответ 2
Оно обозначает метод, который будет реализован на других языках, а не на Java. Он работает вместе с JNI (собственный интерфейс Java).
Собственные методы использовались в прошлом для написания разделов, критичных к производительности, но с ростом скорости Java это стало менее распространенным явлением. Собственные методы в настоящее время необходимы, когда
Вам нужно вызвать библиотеку из Java, написанную на другом языке.
Вам необходимо получить доступ к системным или аппаратным ресурсам, которые доступны только с другого языка (обычно C). На самом деле, многие системные функции, которые взаимодействуют с реальным компьютером (например, дисковый и сетевой ввод-вывод), могут делать это только потому, что они вызывают машинный код.
Метод, который native реализован в платформозависимом коде, обычно написанном на другом языке программирования, таком как C, C ++, FORTRAN или язык ассемблера. Тело native метода задается только в виде точки с запятой, указывающей, что реализация опущена, вместо блока.