62

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

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

4

4 に答える 4

34

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

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

于 2012-11-29T20:48:59.850 に答える
6

llvmがgccのフロントエンドを使用できるようにするdragoneggをご覧ください。gccにはすでにgcjと呼ばれるjavaのフロントエンドがあるため、おそらくllvmはそれを使用してjavaコードをコンパイルできます。しかし、llvmがgccフロントエンドとどの程度うまくインターフェースするかはわかりません。そのため、これは機能しない可能性があります。

于 2012-05-30T11:25:11.903 に答える
3

LLVMに基づくvmkit(http://vmkit.llvm.org/ )を使用してJavaクラスを実行しました。LLVMを使用して、高水準言語をコンパイルおよび最適化してコードをマシン化します。J3は、VMKitを使用したJVMの実装です。

于 2013-01-16T20:46:59.320 に答える
2

[注: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をインストールします...それらが重要かどうかはわかりません)。

于 2014-11-15T03:13:28.833 に答える