Java がバイトコード ファイルにコンパイルされるのに、PHP がオペコード キャッシュを使用するのはなぜですか? 質問する

Java がバイトコード ファイルにコンパイルされるのに、PHP がオペコード キャッシュを使用するのはなぜですか? 質問する

私の観点からすると、PHP と Java はどちらも同様の構造を持っています。最初に高レベルのコードを作成し、それを VM で実行できるように単純なコード形式に変換する必要があります。違いの 1 つは、PHP はソース コード ファイルから直接動作するのに対し、Java はバイトコードを .class ファイルに保存し、そこから VM が読み込むことができることです。

最近では、PHP の高速実行に対する要件が高まっており、ユーザーがファイルにアクセスするたびにコンパイル手順を実行せずに、オペコードを直接操作する方がよいと考える人が増えています。

解決策はいわゆるアクセラレータの山基本的に、コンパイルされた結果をキャッシュに保存し、再度コンパイルする代わりにキャッシュされたオペコードを使用します。

Facebookが行ったもう一つのアプローチは、PHPを完全にコンパイルするコードを別の言語に翻訳します。

そこで私の質問は、なぜ PHP の世界では誰も Java と同じことをしないのかということです。毎回再コンパイルする必要がある動的要素などがあるのでしょうか。そうでなければ、コードが本番環境に導入されるときにすべてをコンパイルして、それを使って作業する方が本当に賢明です。

ベストアンサー1

最も重要な違いは、JVM にはバイトコードを完全にカバーする明示的な仕様があることです。これにより、バイトコード ファイルは移植可能になり、特定の JVM 実装による実行以外にも役立ちます。

PHPには言語仕様PHP オペコードは特定の PHP エンジンの実装の詳細であるため、実際にこれを使用して興味深い操作を行うことはできず、これをより目立たせることにはほとんど意味がありません。

おすすめ記事