メインプログラムはJavaですが、ストレージからデータを抽出するコードはCで記述されています。抽出されたデータからHDF5ファイルを作成する必要があります。JNIを使用してCコードを呼び出してデータを取得し、JavaからHDF5ファイルをビルドするか、CコードからHDF5をビルドする方がよいでしょうか。
JNIまたはCの経験はほとんどありません。
また、私たちの主な基準の1つはパフォーマンスです。JNIを使用すると、パフォーマンスにどの程度の影響がありますか?
メインプログラムはJavaですが、ストレージからデータを抽出するコードはCで記述されています。抽出されたデータからHDF5ファイルを作成する必要があります。JNIを使用してCコードを呼び出してデータを取得し、JavaからHDF5ファイルをビルドするか、CコードからHDF5をビルドする方がよいでしょうか。
JNIまたはCの経験はほとんどありません。
また、私たちの主な基準の1つはパフォーマンスです。JNIを使用すると、パフォーマンスにどの程度の影響がありますか?
関数呼び出しの境界は「遅い」ため、ネイティブ ルーチンに対して多くの呼び出しを行うと、パフォーマンスが低下します。
JNI に移行することでメリットが得られる可能性のあるものの例(Java は多くの目的で十分に高速であるため、私はmayを強調します) は、大きなビットマップで何らかの画像処理を行うルーチンです。しかし、ピクセルごとに JNI ルーチンを呼び出すと、純粋な Java のループ内で呼び出すよりもはるかに遅くなります。
あるフォーマットから別のフォーマットへのデータの抽出は、率直に言って、Python のような「スクリプト」言語で行うのが最適であり、CPU に拘束されることはありません。むしろ、ディスクの速度は、どの言語インタープリターよりもずっと遅くなります。
あなたは C の経験がほとんどないので、Java を使ってそれを行うのが最善の選択であると私には思えます.JNI は実際にはそれほど悪くはありません。
私は C 以外の HDF インターフェースにまったく詳しくないので、実際に比較することはできません。
これは他のすべてのインターフェイスが使用する API であるため、最大のパフォーマンスを引き出す必要がある場合は、C API が最適です。
また、API のどの部分を使用できるかについての質問もあります。たとえば、私はもともと C++ インターフェイスから始めました。一部の API は、まだ C API でしか使用できませんでした。これは、C および C++ を使用している場合は問題になりませんが、必要な API が利用できない場合は問題になる可能性があります。
そうは言っても、C のオブジェクト モデルに関して頭をねじ込む必要があります。ポインタ、ハンドルなどの使用。