2016-07-04 4 views
1

たとえば、JavaバイトコードがCと混在している可能性があります。JvmはJavaバイトコードを実行し、Cの部分がヒットした場合はOSに実行を切り替えます。これは技術的に可能か実践ですか?複数の言語を1つのバイナリにまとめることはできますか?

+1

正確ではありません。 JNI(またはJNA)でネイティブコードを呼び出すことは可能ですが、C++です(C++経由でネイティブコードにリンクする必要があります)。 –

+0

JVM用のCコンパイラである[GCC Bridge](http://www.renjin.org/blog/2016-01-31-introducing-gcc-bridge.html)があります。 –

+0

@ElliottFrisch JNI/JNAもC言語で動作します(IIRC、JNAはC言語でのみ動作します)。 –

答えて

2

一般に、JVMを作成し、提供されたバイトコードを実行し(execve)、そのデータを交換するためにJNA/JNIの間でIPCを使用する別のスレッドで実行するか、または操作を行い、完了を待つCコードを書くことができます。

このアプローチを使用したいくつかのプロジェクト(Androidシステムの一部、Cloudera Impalaなど)を満たしましたが、コードは複雑すぎてほとんど追跡できません。それが正しく動作するようにするには、あまりにも多くの努力が必要でした。場合によっては、データシリアライゼーション(倹約、protobuf)と良いIPCと異なる技術を使用して2つのプロセスを実行するか、それらのうちの1つだけを使用する方が良い場合もあります。

まだ両方を実行する必要がある場合は、JNIでネイティブ関数を呼び出すJavaでシステムを構築することをお勧めします。

関連する問題