私が読んだことから、Javaバイトコードをclass2llvmと呼ばれるllvmの中間形式に変換するllvmプログラムがあります。私の質問は、これにアクセスする方法です。どのフロントエンドをインストールする必要がありますかこれにアクセスするために。
VMkitはJVMの実装ですが、Javaソースコードをllvmでコンパイルする方法ではなく、実行方法を探しています。
JavaフロントエンドはJavaバイトコード(.classファイル)をLLVMバイトコードに変換します。このリンクをご覧ください。
https://llvm.org/svn/llvm-project/Java/trunk/docs/Java-frontend.txt
Llvmがgccのフロントエンドを使用できるようにする dragonegg をご覧ください。 gccはgcjと呼ばれるJavaのフロントエンドをすでに持っているので、おそらくllvmはそれを使用してJavaコードをコンパイルできます。 llvmがgccフロントエンドとどれだけうまくインターフェイスするかわかりませんので、これはうまくいかないかもしれません。
LLVMに基づいてvmkit( http://vmkit.llvm.org/ )を使用してJavaクラスを実行しました。高レベルのコンパイルと最適化にLLVMを使用しますJ3はVMKitを使用したJVMの実装です。
[注:2015年11月からオープンソースではなくなったため、このハックはほとんど役に立ちません。]
RoboVM は、あなたが探しているソリューションになるかもしれません。オープンソースであり、JVMバイトコード(.classファイル)をマシンコードにコンパイルします。
私は彼らがclass2llvmのようなものを使用してそれを行うと仮定します。
残念ながら、まだアルファ版です。 HelloWorld.Javaでテストしました。単一コアで実行するロード時間を5倍高速化しました。 (実行時間のほとんどはロード時間です。)
echo Hello World! : <1 ms : 31K
(/ usr/bin/echo binary)
Java HelloWorld : ~70 ms : 0.4K
(HelloWorld.class JVMバイトコード)
./HelloWorld : ~13 ms : 9.4MB
(9.3MBバイナリ+ 57K robovm-rt.jar)
Javaは32MBの$ Java_HOME/lib/rt.jarファイル(およびそれ以上)を呼び出すことに注意してください。このような大きなファイルでの検索は、Javaのロードが非常に遅い理由の一部である必要があります。 RoboVMがよりスマートになれば、おそらくより高速なロードのために9.3MBのバイナリのほとんどを捨てることができるでしょうか?
ウェブサイトではiOSについて言及していますが、それは彼らがアドオンUIライブラリを販売しているからだと思います。 RoboVMは、Ubuntuのフレーバーでうまくコンパイルされました。必ずやる
$ sudo apt-get install g ++-multilib
最初に(そしておそらくlibpthread-stubs0-devとlibpthread-workqueue0をインストールします...それらが重要かどうかわからない)。