私が読んだものから、javaバイトコードをclass2llvmと呼ばれるllvmの中間形式に変換するllvmプログラムがあります。私の質問は、どうすればこれにアクセスできるかということです。これにアクセスするには、どのフロントエンドをインストールする必要がありますか。
VMkitはJVMの実装ですが、実行方法ではなく、llvmを使用してJavaソースコードをコンパイルする方法を探しています。
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バイナリ)
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をインストールします...それらが重要かどうかはわかりません)。