web-dev-qa-db-ja.com

llvm JavaフロントエンドをJavaソースをllvmの中間形式に変換しますか?

私が読んだことから、Javaバイトコードをclass2llvmと呼ばれるllvmの中間形式に変換するllvmプログラムがあります。私の質問は、これにアクセスする方法です。どのフロントエンドをインストールする必要がありますかこれにアクセスするために。

VMkitはJVMの実装ですが、Javaソースコードをllvmでコンパイルする方法ではなく、実行方法を探しています。

51
FeelTheBurns

JavaフロントエンドはJavaバイトコード(.classファイル)をLLVMバイトコードに変換します。このリンクをご覧ください。

https://llvm.org/svn/llvm-project/Java/trunk/docs/Java-frontend.txt

31
Ashkan

Llvmがgccのフロントエンドを使用できるようにする dragonegg をご覧ください。 gccはgcjと呼ばれるJavaのフロントエンドをすでに持っているので、おそらくllvmはそれを使用してJavaコードをコンパイルできます。 llvmがgccフロントエンドとどれだけうまくインターフェイスするかわかりませんので、これはうまくいかないかもしれません。

6
lei_z

LLVMに基づいてvmkit( http://vmkit.llvm.org/ )を使用してJavaクラスを実行しました。高レベルのコンパイルと最適化にLLVMを使用しますJ3はVMKitを使用したJVMの実装です。

3
Ashkan

[注: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の$ J​​ava_HOME/lib/rt.jarファイル(およびそれ以上)を呼び出すことに注意してください。このような大きなファイルでの検索は、Javaのロードが非常に遅い理由の一部である必要があります。 RoboVMがよりスマートになれば、おそらくより高速なロードのために9.3MBのバイナリのほとんどを捨てることができるでしょうか?

ウェブサイトではiOSについて言及していますが、それは彼らがアドオンUIライブラリを販売しているからだと思います。 RoboVMは、Ubuntuのフレーバーでうまくコンパイルされました。必ずやる

$ sudo apt-get install g ++-multilib

最初に(そしておそらくlibpthread-stubs0-devとlibpthread-workqueue0をインストールします...それらが重要かどうかわからない)。

2
expz