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.