web-dev-qa-db-ja.com

JavaバイトコードAndroid-DalvikVM上でのSunJVM

Java実装(OpenJDK)とAndroidの仮想マシンDalvikVMはどちらもオープンソースであるため、GoogleのDalvikVMの上にSunのJavaVMを実装できる必要があります。これによりJVMの実行が可能になります。ベースのアプリと言語(Clojure, Jython)Androidですぐに使用できます。

Sun JVMのそのような実装を作成するための継続的な取り組みはありますか?

18
George

OpenJDKはネイティブコードを利用するため、重要なポートになります... Javaで記述されたVM( JikesRVM )が少なくとも1つあります。残念ながら、これはJavaの完全に機能する実装ではありません。

DalvikVMは.classファイルから変換されたクラスを実行するため、クラスを変換できるはずです。次に、「唯一の」問題は、言語がオンザフライでバイトコードを生成する場合です。そのため、プログラムがDalvikVMで実行されている間に、生成されたバイトコードをDalvikVM形式に変換する追加の手順が必要になります。

うーん....電話の実行時にクラスファイルをDalvikVMファイルに変換する一種のJITT(ジャストインタイムトランスレータ)。それはどれくらい遅いのだろうか。

13
TofuBeer

OpenJDKをAndroidプラットフォームに移植することは可能です。移植プロセスを大幅に容易にするShark、Zero、caciocavalloなどの取り組みがあります(= ASMなし、単純なAWTピア)。さらにAndroidは背後にあるLinuxカーネルに他なりません。唯一の問題は、いつ誰かがそれを行うのかということです。

ちなみに、iphoneとAndroid電話の両方がJazelle互換プロセッサを搭載しているので、非常に強力なプロセッサハッキングスキルを持っている人なら、OpenJDKにJazelleサポートを追加できます。そうすることで、次のいずれかを選択できます。軽資源加速(ジャゼル)とJIT ;-)

IPhoneについても同じです。移植が可能です。 AppleのみがiPhoneライセンスに、VMの使用を明確に禁止するセクションを配置しました。ヨーロッパの法律により、このライセンスセクションは違法です。2つ理由:2つの製品の購入を強制/リンクすることはできません。ここで調整し、iPhoneがリンクされます。販売できるものの販売を拒否することはできません。ここでVM iPhone用にビルドされ、iTuneストアへの掲載が拒否された場合は、この点が適用されます。Appleライセンスの合法性に挑戦したい人はいますか?私はしません。そう思うと、不幸な人々はAndroidまたは他のプラットフォームに飛んでくるでしょう。

9
testman

その間に、私は可能な解決策を見つけました(JavaMEのみ):

1
George

技術的には、dalvik vmのホットスポットバイトコードまたはホットスポットのdalvikのバイトコードを解釈できるはずですが、長期的には効率的な(エレガントなことは言うまでもなく)設計にはなりません。それを行うためのコストは、特にそのような分割されたエコシステムの将来の進化におけるメンテナンスに関して、非常に高くなる可能性があります。

dalvik vmは、最初から、Java仮想マシンエコシステムを改善するための革新的な取り組みではなく、電力/市場管理の問題だと思います。dalvikvmとhotspot vmは、同じ川が互いに5メートル離れて並行して構築されます。それは分裂し、Java技術的エコシステムに混乱をもたらします。

私の意見では、グーグルは間違いなく過去10年間で革新的な貢献をし、はるかに保守的なOracleを矮小化した技術リーダーですが、この主題では、彼らはJavaエコシステムをほぼ破壊的な方法で揺さぶっています。 (プログラマーは)この問題に対する単一の統一された解決策を模索する必要があります。それはとにかく「仮想マシン」の概念の背後にある主要なアイデアです-それはグーグルにもオラクルにも属してはなりません。

1
jan

問題は技術的なものではないと思います。理論的には、たとえばOpenJDKをiPhoneに移行できますが、法的な制限があります。

0
Peter Lawrey

debian WheezyでGNURootアプリ(proot ptraceコンテナー)を試してください。
apt-更新を取得
apt-get installopenjdk-7-jre
/usr/lib/jvm/Java-7-openjdk-armel/jre/bin/Java.。
(長いパスを含む)

0
user908510

http://davy.preuveneers.be/phoneme/ for MIDP、Foundation and Personal Profile jvms for Android ARM apks 。(ありがとうデイビー!!!)

コマンドラインで使用するためにFoundationjvmを再パッケージ化し、vkfox.com/Android/bin /foundation-jvm.binでホストします。 JavaIDEdroid無料アプリでEclipseコンパイラを使用するか、このjvmで古いkopiまたはkopisusuコンパイラを使用して、オンボード開発システム用のJ2MEjdkからのスタブされたcdc + Foundationjarファイルと一緒に使用できます。 TerminalIDEの機能(コンソールとSunコンパイラ)を指定されたref jarで使用すると、そこに到達します。これは基本的にヘッドレスjdk1.4と同等であり、MIDPまたはawtグラフィックスの可能性があります。

0
user3258608