Используя собственный интерфейс Java (JNI) в архитектуре программного обеспечения, код Java, работающий на виртуальной машине Java (JVM), может вызываться собственными приложениями (программами, специфичными для платформы оборудования и операционной системы), а также библиотеками, написанными на других языках, таких как C , С++ и ассемблер. Курс разработки Java может улучшить ваши навыки.

Цели

Например, если стандартная библиотека классов Java не поддерживает специфичные для платформы функции или программную библиотеку, JNI позволяет программистам создавать собственные методы для решения проблемы и уменьшения числа ошибок. Существующее приложение, созданное на другом языке программирования, также можно изменить для работы с приложениями Java. Многие классы стандартной библиотеки, такие как файловый ввод-вывод и звуковые возможности, полагаются на JNI для предоставления функциональных возможностей разработчикам и пользователям. Включение в стандартную библиотеку реализаций API, зависящих от производительности и платформы, позволяет всем Java-программам безопасно и независимо использовать эту функциональность.

Чтобы получить доступ к объектам Java так же, как это делает код Java, среда JNI позволяет собственному методу использовать их так же, как это делает код Java. Объекты, созданные собственным методом в Java, могут быть проверены и использованы этим методом для выполнения его операций. Кроме того, собственные методы могут обращаться к объектам, созданным в Java, и взаимодействовать с ними.

JNI может использоваться только подписанными приложениями и апплетами. Переносимость, обеспечиваемая Java, теряется, когда приложение зависит от JNI (частичный обходной путь — написать отдельную реализацию информации о коде JNI для каждой платформы, чтобы Java определял операционную систему и загружал правильную во время выполнения).

Собственные программы могут рисовать на холсте Java с помощью собственного интерфейса Java AWT. Почти то же самое, с небольшими изменениями. J2SE 1.3 имеет собственный интерфейс AWT. JNI обеспечивает прямой доступ к ассемблерному коду без C-моста. Java-программы из сборки такие же, как из виртуальной машины Java.

Курс разработки бэкенда на Java может дать вам лучшее представление об этой теме.

Дизайн

Существуют отдельные файлы .c или .cpp для собственных функций в среде JNI. (С JNI C++ предлагает немного более удобный интерфейс.) JNIEnv, указатель задания и любые другие параметры Java, определенные методом Java, передаются этой функции JVM при ее вызове.

env pointer — это указатель на среду JVM. Включено все необходимое для взаимодействия с виртуальной машиной Java и работы с объектами Java. Примеры функций JNI включают преобразование массивов собственных типов в массивы Java и обратно, а также преобразование строк собственных типов в строки Java и обратно. Используя JNIEnv, вы можете выполнить почти все, что может сделать код Java, но с гораздо меньшей легкостью.

Параметр obj является указателем на объект Java, в котором определена эта собственная функция. Можно сопоставить собственные типы данных с типами данных Java. Для преобразования объектов, массивов и строк собственные программы должны использовать функции JNIEnv.

Методы Java, преобразованные в собственные функции, получают указатель среды для взаимодействия с JNI. Только текущий поток может использовать эту ссылку на интерфейс JNI. Другие потоки должны использовать AttachCurrentThread для получения ссылки JNI (). После присоединения собственные потоки действуют как потоки Java в собственных процедурах. Собственный поток подключается к виртуальной машине до тех пор, пока не будет вызван DetachCurrentThread().\

Производительность

Стоимость и потери производительности, вызванные JNI, могут быть значительными в некоторых ситуациях. Использование методов JNI требует больших затрат, особенно если вам приходится вызывать одну и ту же функцию снова и снова.

  1. Ни JVM, ни JIT-компилятор не могут встраивать собственные методы, поскольку метод уже создан.
  2. Можно скопировать массив Java в собственный код для доступа, а затем скопировать его обратно. Стоимость может быть прямо пропорциональна размеру массива.
  3. Если метод предоставляется с объектом или требует обратного вызова, собственный метод, скорее всего, сам свяжется с JVM. Для доступа к полям, методам и типам Java из собственного кода требуется функциональность, подобная отражению. Строки предоставляют подписи, которые затем ищет JVM. Это вяло и склонно к ошибкам.
  4. Закодированная строка в Java — это объект, содержащий определенное количество символов. При доступе или построении строки может потребоваться копирование O(n).

Стоимость курса Java-разработчика может достигать 60 000 индийских рупий.