20

Google が Android のフレームワークを Java VM で開発することを選択した理由を知りたいです。

Android 用のコードを 6 か月近く書いている過程で、リソースが限られたプラットフォームの VM でコードを実行すると非常に遅いことがわかりました。多くのオーバーヘッドが伴います。Java はポータブルなどであることは知っていますが、ネイティブ言語を使用して、VM が提供するパフォーマンスと機能の両方を取得することはまったく不可能ですか? パフォーマンス指向のアプリケーションの場合、依然としてネイティブ コードを記述し、それを JNI でラップすることになります。

では、なぜ Google はこの特定のスタックを選択したのですか :

  1. Arm ベースのコア (モバイル デバイスには ARM が最適です)
  2. Linux (オープンソース)
  3. Java VM (私の質問)

編集:私はJavaを知っています-JVMは私のサーバー上のC++アプリケーションと同等に動作しますが、Androidでは動作しません。Androidに関してはそうではありません-私の経験の問題として、JNIでラップされたC++コードはJavaコードよりもはるかに高速に実行されます(Javaの静的ブロックからのまったく同じコードでチェックしたことにも注意してください)私はあなたに同意します他のプラットフォームで回答してください。

4

4 に答える 4

5

Dalvik VM は、Java バイトコードではなく、独自のバイトコードを使用します。非常に高速になるように設計されています (比較的言えば)。そのタイトルの「VM」の部分は、何があっても「遅い」と人々が想定する傾向があるため、少しニシンのようなものだと思います。あなたは「リソースが限られたプラットフォーム」で作業していると言いました.Dalvik VMよりもはるかに遅いパフォーマンスの主な原因です.

免責事項: 私はDalvik や Android の専門家ではありません。しかし、人々は Android について「VM を使用している」、「アプリケーションを Java で作成している」などの考えに基づいて多くのことを推測しがちであり、それ以上のプラットフォームについて調べずにいるようです。

Dalvik VM の内部 (Google I/O 2008 から) について知りたいと思われるよりも多くの情報については、このビデオを参照してください。

于 2010-12-20T16:43:25.513 に答える
2

1) Java は、私の知る限り、大学や高校/同等の学校でさえ、最も広く教えられている言語です。プロの世界で広く使用されており、その背後には多くのコードベースがあり、開発者がより高品質のアプリをより速く作成するのに役立ちます.

2) オーバーヘッドは、ネイティブ コードと比較してそれほど大きくありません。特に、JIT が最適化され、より適切に設計された gc によって監視されている、適切に設計されたコードの場合はそうです。

本当に、この 2 つの理由だけでも、Java が Android でサポートされる主要言語として選ばれた理由を正当化できると思います。

于 2010-12-20T17:07:01.513 に答える
0

重要なのは、Java VM について、Destkop やサーバーの仮想化について考えるのと同じ意味で考えないことだと思います。これらは大きく異なります最も基本的なレベルでは、Java VM (この場合は Dalvik) は、「コンパイラ」によって生成されたバイトコードとネイティブ マシン コードとの間の単なる変換レイヤーです。これ仮想マシンですが、VirtualBox で Ubuntu を実行する場合と同じオーバーヘッドはありません。

于 2010-12-20T16:57:32.217 に答える
0

Java アプリケーションは、c、c++ などの言語で記述されたアプリケーションと同じくらい迅速かつスムーズに実行されることが (常にではありませんが) 証明されています。このリファレンスを参照し、PDF をチェックしてください。多くの人が、Java と vm は実際には多くの証拠や詳細なしに遅いと言っています。

Java は広く知られている言語であり、簡単に習得できます。Android SDK とツールを Java を知っているこれらすべての人々の手に渡すことで、Android 市場はユーザーに大量のアプリケーションを提供できる大きな可能性を秘めています。

免責事項:私はこの問題の専門家ではありません.2セントだけです

于 2010-12-20T16:58:11.753 に答える