JythonやJrubyのようなJVMの実装は、どのようにしてネイティブのカウンターパートを打ち負かすことができますか?
-
28-09-2019 - |
解決
それは、JVMがCが間違っているよりも遅いという一般的な考えを意味しますか、それとも元のC実装に欠陥がありますか?
両方の少し
JVMは長い間存在しており、効率が大幅に進歩しています。ガベージコレクション、ジッティング、キャッシュ、その他のエリアは、PHPなどの「参照」実装よりも高度です。
PHPのボンネットの下で見る人は、効率の向上が簡単に達成できる理由を理解するでしょう。
私はJVMがcpythonを上回ることができることを個人的に疑っています ...しかし、私は間違っている可能性があります... 私は、これはJVM GCがより速く、Ironpythonも. 。パフォーマンスの改善は、Stackless PythonなどのCコールスタックに依存しない可能性があります。 Jythonサイトの状態
JythonはCpythonとほぼ同じくらい速いです - 時々、より速く、時には遅くなることがあります。 >ほとんどのjvms(確かに最速のJVM)が長い走行であるため、Hot Codeは残業をより速く実行するからです。
JVMがキャッシュが生成するにつれてCパフォーマンスレベルに達すると、私が事実を評価することができます。
PHPやPythonなどの多くの解釈言語では、同等のC呼び出しとマシンコードに潜ります。 JVMでは、ジッターはバイトコードをマシンコードの等価物を削減することにより、同様の関数を実行します。最終的には、高レベルの構文やバイトコードなどの中間表現は通常、とにかくCスピードまたはより速いCPU操作に縮小されます...したがって、それはすべて同じです、ちょうど より中間ステップ これは、新しいコードをロードするときのレイテンシに完全な効率に影響します。ラムには「本当の違いは何ですか?」と言うポイントがあります。そして、答えは、そこに到達するプロセスと、スタック巻線、ガベージコレクションアルゴリズム、レジスタの使用、算術などのロジック表現の速度を決定する最終的な表現のみです。
他のヒント
それほど難しくありません。 Cで実装を書く場合は、独自のGC、JITなどを作成する必要があります(迅速かつ効率的であるため)。それを本当に良いことをするためには、多くの経験を持つ本当に賢い人々が必要であり、彼らに多くの時間を与えます。
私はここで手足に出て、PHPの現在の実装(内部の作業に関する知識ではなく、私が見たベンチマークやPHPについてもっと知っている人が私に言ったものに基づいていると言っています)アートの。 Facebookはこれに対処しようとしますが、彼らは珍しい方法でそれを行います(特別なニーズとPHPの典型的な使用のために http://www.stanford.edu/class/ee380/abstracts/100505.html).
概要:したがって、誰かがJava(または速いVM)でPHPを実装している場合、彼はスーパーGCまたはJITを「速い」コンパイラ(シンプルにすることができる)になるために書く必要はありません。
仮想マシンが何をするかについていくつかのヒントがあります ここ. 。たとえば、Java Virtual Machineは、最初にバイトコードのどの部分が最も頻繁に実行されるかを最初にチェックしてから、関連する部分をネイティブコードにコンパイルします(次に、EGコンパイルされたCコードと同様の速度で実行する必要があります)。
ちなみに、PHPはbytecodeにコンパイルされますか、それともメモリ内のデータ構造を使用して解釈されますか?最初にJava仮想マシンによってPHPをByteCode実行可能ファイルに変換することにより、バイトコード実行の既存の(言語に依存しない)最適化から自動的に利点があります。