2

最近、ネイティブとバイトコードの違いについて考えています。私はいくつかの調査を行いましたが、読んだすべての情報は、ネイティブ コードにコンパイルされた C++ コードとバイトコードにコンパイルされた Java コードに関するものでした (マルチコア プロセッサを利用する JVM で実行されます)。結論として、Java で作成されたアプリケーションはより高速に実行されます。

C++11 はこれを変更しますか? C++11 で記述されたアプリケーションは (スレッドを追加するため)、Java のものよりも高速に実行されますか?

4

3 に答える 3

3

結論として、Java で作成されたアプリケーションはより高速に実行されます。

それは大きな飛躍です。システムのパフォーマンスに影響を与える要因は非常に多いため、あるアプローチが常に他のアプローチよりも優れている、またはより高速であるとは言い切れません。

C++ は常にスレッドを使用することができましたが、スレッドの使用方法に関する詳細があまりありませんでした。C++11 はパフォーマンスに関するものではなく、メモリ モデルなどの標準化に関するものだと思います。

IMHO いくらかの時間と専門家の開発者が与えられたとしても、C++ プログラムは常に Java プログラムよりも高速です。ただし、限られた時間とさまざまな能力を持つ開発者を考えると、Java で何かが機能し、うまく機能する可能性が高くなります。あなたの走行距離は異なります。;)


私の答えをより明確にする...

C++11 はこれを変更しますか?

いいえ、それが状況であることに同意しませんし、状況が変わるわけでもありません。

C++11 で書かれたアプリケーションは (スレッドを追加するため) Java のものよりも高速に実行されますか?

はい、常にではありません。以前のバージョンと同様です。

于 2012-11-28T18:13:52.343 に答える
2

C++ も Java も、プログラムを自動的に複数のスレッドに分割しません。最新の言語で自動並列化に最も近いのは、並列コレクションを使用することです。C++ でそれを行うためのライブラリがありますが、Haskell、Scala、Clojure などのより機能的な言語では、そのようなものをより適切にサポートしています。自動並列化を実現するもう 1 つの方法は、アクター ライブラリを使用し、アクターを使用してプログラム全体を作成することです。Erlang はそれを完全にサポートした最初の言語でしたが、Scala/Java 用の Akka フレームワークも非常に優れています。

于 2012-11-28T18:25:21.780 に答える
1

私はただ言うでしょうAll Your Java Bases Are Belong To C++.。JVM 自体は C/C++ で記述されています。C/C++ はマシンのベアメタル上でネイティブ速度で実行されますが、バイトコードは (メタル上で実行される) C/C++ コードによって解釈されます。1 つのバイトコード命令は、約 5 ~ 10 個の asm 命令 (またはそれ以上) に変換できます。したがって、C/C++ の実行速度は Java よりも速いと見なされます。もちろん、Java のランタイムが金属に投入され、バイトコードがマシンの速度で解釈された場合、それは公正な比較になります。

そうは言っても、「Programming Pearls」という本の例を参照してください。この例では、著者が解釈された BASIC プログラムを Radioshack パーソナル コンピューターで実行しています。このプログラムは、十分に最適化されており、スーパー コンピューターよりも高速に実行されます。つまり、プログラムの実行速度は、アルゴリズムとコーディング/最適化の実践に依存します。

于 2012-11-28T18:21:27.330 に答える