Java Native Interface (JNI) er en standardmekanisme til at køre kode under kontrol af Java Virtual Machine (JVM), som er skrevet i C/C++ eller Assembly og forbundet som dynamiske biblioteker; tillader ikke at bruge statisk linking. Dette gør det muligt at kalde en C / C++ funktion fra et Java -program og omvendt. Tidligere grænseflader, i modsætning til JNI, opfyldte ikke betingelsen om binær kompatibilitet .
Den største fordel ved JNI i forhold til den tidligere version ( JDK 1.0 NMI - Native Method Invocation) og andre lignende grænseflader (Netscape Java Runtime Interface eller Microsofts Raw Native Interface og COM/Java Interface) er, at JNI oprindeligt blev designet til binær kompatibilitet til anvendelse kompatibilitet, skrevet ved hjælp af JNI, for alle virtuelle Java-maskiner på en bestemt platform. Derfor skal kompileret C / C++- kode udføres af Java-maskiner, for eksempel i forskellige browsere, udviklingsværktøjer som Symantec Visual Cafe og Sun Java Workshop, for en bestemt platform ( Win32 i dette tilfælde). Tidligere grænseflader opfyldte ikke betingelsen om binær kompatibilitet .
Gennem denne mekanisme kan Java-bytekode interagere med system- eller applikationsplatformspecifik kode, der kører direkte under forskellige operativsystemer [1] .
Den platformsspecifikke JNI-grænseflade giver ikke adgang til hele applikationsprogrammeringsgrænsefladen for et bestemt operativsystem, men kun til noget af det. JNI blev først brugt i Java version 1.1 og blev udviklet i Java 2.
NMI (Native Method Invocation) var den første mekanisme, Sun specificerede til at kalde C-kode fra Java, og den eneste mekanisme, der understøttes i JDK 1.0.2. I alle efterfølgende versioner af Java understøttes NMI ikke længere, idet den erstattes af en delvist kompatibel JNI-mekanisme.