JNI
JNIは「Java Native Interface」の略です。JavaからCPU上で動くプログラムを呼び出すインターフェース機能です。
Java以外の言語で組まれたプログラムをJavaではNativeメソッドと呼びます。JavaはこのNativeメソッド呼び出すことが出来ます。
JNIを使用すればC言語のプログラムも呼び出すことが出来ます。しかし、C言語のプログラムに少々加工しなければJavaから呼び出すことは出来ません。純粋なC言語ではないということです。
JNA
呼び出し先の言語を加工しないで呼び出すには、JNAとよばれる仕組みを使用します。JNAは「Java Native Access」の略です。
JNAはライブラリとして提供されており、Maven Central Repositoryにも在ります。さらに使い方もJNIより簡単なので、ネイティブメソッドを呼び出す際にはJNAがおススメです。
まとめ
言語によって得手不得手があるので、うまく言語を組み合わせることで最適なシステムが出来るかもしれません。
業務においては、すでに作成されたシステムがJava以外で、これからはJavaを使っていきたいというケースでJNI/JNAを使用するケースが多いです。
まだ私は経験したことは無いですが、JNI/JNAを使用すればJavaからCOBOLやアセンブラを呼び出すことも可能なので、これを活用してシステム改修することも出来ますね。
参考情報
Java Native Interface仕様の目次 – Oracle (Java13)
JavaからCの処理を呼ぶ方法(JNI/JNA/SWIG) – Qiita