Перейти до вмісту

Java Native Interface

Матеріал з Вікіпедії — вільної енциклопедії.
Версія від 08:22, 3 жовтня 2023, створена 78.152.161.54 (обговорення)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)

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

Призначення

[ред. | ред. код]

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

За допомогою цього механізму байт-код Java може взаємодіяти з системним або прикладним платформенно-орієнтированим кодом, запущеним під управлінням різних операційних систем. Наприклад, до ряду системних викликів прикладного інтерфейсу програмування Windows (Windows API), Mac OS API чи GNU/Linux

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

Застарілий інтерфейс

[ред. | ред. код]

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

Див. також

[ред. | ред. код]
  • Platform Invocation Services (P/Invoke) — аналог JNI в середовищі .NET Framework
  • Java Native Access — бібліотека для більш зручного доступу до нативного коду Java.