Java では、JVM (HotSpot など) は JIT コンパイルが可能であり、この手法を使用して、バイトコードをネイティブ コードにコンパイルすることで実行を高速化します。私の質問は、これは技術的にどのように起こるのですか? 私の理解では、最新のプロセッサはメモリ領域を読み取り専用のセクションと実行可能なセクションにマークして、悪意のあるコードの実行を防止しています。そのため、JVM は新しい「実行可能コード」を、アクセスできるメモリ空間 (つまり、自己変更コード) に実際に書き込むことはできません。したがって、JVM はネイティブ コードを生成し、それをファイルに書き込み、オペレーティング システム サービスを使用してそのネイティブ コードをメモリに動的にロードすると推測しています。
私はこの答えを見ました:JITコンパイルされたコードはメモリに注入されて実行されますか? 、しかし、オペレーティングシステムがユーザープログラムの読み取り+実行メモリ領域を許可する理由については混乱しています。他のオペレーティング システム、つまり Linux などは、JIT が機能するために同様のものを提供していますか?
誰かが私の理解を明確にするのを助けることができますか?