Java Native Interface

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Knyf (обсуждение | вклад) в 18:44, 2 октября 2009. Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску

Java Native Interface (JNI) — стандартный механизм для запуска кода, под управлением виртуальной машины Java (JVM), который написан на на языках С/С++ или Ассемблера, и скомпанован в виде динамических библиотек, позволяет не использовать статическое связывание. Это дает возможность вызыва функции С/С++ из программы на Java и, наоборот.

Описание

Основным преимуществом JNI перед предыдущей версией (JDK 1.0 NMI - (Native Method Invocation)) и другими похожими интерфейсами (Netscape Java Rintime Interface или Microsoft's Raw Native Interface and COM/Java Interface) является то, что JNI изначально разрабатывался для обеспечения двоичной совместимости, для совместимости приложений, написанных с использованием JNI, для любых виртуальных машин Java на конкретной платформе. Поэтому скомпилированный С/С++ код должен исполняться Java-машинами например, в Netscape Navigator, Microsoft Explorer, в средствах разработки Symantec Visual Cafо и Sun Java Workshop для конкренной платформы (Win32 в рассматривемомо случае). Более ранние интерфейсы не удовлетворяли условию двоичной совместимости.

С помощью этого механизма байт-код Java может взаимодействовать с системным или прикладным платформенно-ориентированным кодом, запущенным непосредственно под управлением различных операционных систем.[1]

Платформенно-зависимый интерфейс JNI предоставляет доступ не ко всему интерфейсу прикладного программирования конкретной операционной системы, а лишь к некоторой его части. Впервые JNI использовался в Java версии 1.1 и был развит в Java 2.

Устаревший интерфейс

NMI (Native Method Invocation) был первым механизмом, специфицированным Sun для вызова из Java кода на C, и единственным механизмом, поддерживавшимся в JDK 1.0.2. Во всех последующих версиях Java NMI больше не поддерживается: его заменяет частично совместимый с ним механизм JNI.

Примечания

  1. Например к ряду системных вызовов прикладного интерфейса программирования системы Windows (Windows API), Mac OS API или GNU/Linux

См. также