この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 3162|答える: 1

[通信] .NETにおけるJITとAOTコンパイルの紹介と違い

[リンクをコピー]
掲載地 2024/02/15 17:17:46 | | | |
用語

CLI: 共通言語インフラストラクチャは、.NETフレームワークの下で言語に依存しないクロスアーキテクチャのランタイムを定義する仕様です。 したがって、仕様の下で異なるコンピュータアーキテクチャで動作する高水準言語のソフトウェアを修正なしで開発できます

CLR:共通言語ランタイム。 は、オペレーティング環境が言語に依存しず、かつクロスアーキテクチャであることを保証する仕様です

CTS:共通型システム

CLS:共通言語仕様

FCL: Framework Class Library 架构类库,包含两部分: 基础类库 Base Class  Library 和成品类库

IL: Immediate Language Intermediate Language, Advanced Language Compilerは、高度な言語のソースコードを中間言語にコンパイルします。

JIT:Just In Time Compilerは中間言語をコンピュータが理解できる機械語にコンパイルし、実行できるようにします

ソースコードはC#コンパイラ(プログラム、DLL、EXなど)によってILにコンパイルされます。 CLRはこれらのILを読み込み、JITを通じて機械語にコンパイルし、最終的に実行されます。以下の図に示されています。



JIT(ジャストインタイムコンパイラ)はその場でコンパイルされます

ジャストインタイムコンパイラ(JIT)は.NETの共通言語ランタイム(CLR)の一部であり、 の管理を担当します。 .NET プログラムは、 .NETプログラミング言語。 言語固有のコンパイラはソースコードを中間言語に変換します。 この中間言語はジャストインタイム(JIT)コンパイラによって機械語に変換されます。 この機械語は、JITコンパイラが動作するコンピュータ環境に特化しています。  JITコンパイラの作業:JITコンパイラはコードの実行速度を上げ、複数のプラットフォームに対応しなければなりません。 仕組みは以下の通りです:



JITコンパイラは、Microsoft Intermediate Language(MSIL)またはCommon Intermediate Language(CIL)を機械語に変換します。 これはMSILやCILを行う前に行われます。 MSILは必要に応じて機械語に変換されます。つまり、JITコンパイラはコード全体をコンパイルするのではなく、必要に応じてMSILやCILをコンパイルします。 コンパイルされたMSILまたはCILを保存し、必要に応じて後続の呼び出しに使えるようにします。

JITの長所:

  • 現在のハードウェア状況に応じてリアルタイムでコンパイル・生成が可能です
  • 最適な機械命令列は、現在のプログラム操作に従って生成できます
  • プログラムが動的リンクをサポートする必要がある場合、JITコンパイル方式のみを使用できます
  • コードはプロセス内のメモリの実際の状況に応じて調整でき、メモリの有効活用が可能です


JITのデメリット:

  • コンパイルにはランタイムのリソースが必要であり、実行時にプロセスがスタッターを生みます
  • コンパイルは実行時間を要し、一部のコードコンパイル最適化は完全にサポートできないため、流暢さと時間のバランスが必要です
  • コンパイル準備や頻繁に使われる手法の特定には時間がかかり、初期のコンパイルは最高のパフォーマンスを達成できません


AOT(Ahead-of-time compiler)は事前にコンパイルされます

コンピュータサイエンスにおいて、早期コンパイル(AOTコンパイル)とは、通常は高水準プログラミング言語を(通常)低レベル言語にコンパイルしてから、通常はビルド時に実行し、実行時に必要な労力を減らす行為を指します。

多くの場合、これは高水準プログラミング言語(例えばCやC++)やJavaバイトコードのような中間表現を組み合わせるものとは異なります。 NET Framework Common Intermediate Language(CIL)コード)をネイティブ(システム依存)な動作関連にコンパイルしたものです。 機械語で、得られたバイナリをネイティブに実行できるようにし、標準的なネイティブコンパイラと同じように。 この特定の環境で使用される場合、ジャストインタイム(JIT)コンパイルの正反対と見なされることが多いです。

AOTのコンパイルはプログラムがコンパイルまたはインストールされる前に行われ、つまりスクリプトやバイトコードを機械語に事前コンパイルし、必要に応じて直接実行します。 これによりプログラムの起動速度が向上し、コンパイルプロセスによる遅延を回避できます。

AOTの長所:

  • プログラム実行前にコンパイルすることで、コンパイル性能や実行時のメモリ消費を回避できます
  • プログラムの初期段階でピークパフォーマンスを達成できます
  • これによりプログラム実行の効率が大幅に向上します


AOTのデメリット:

  • プログラム実行前にコンパイルすると、インストールにかかる時間が長くなります
  • 事前コンパイル済みのコンテンツを保存するとメモリを多く消費します
  • 高水準言語の一貫性を犠牲にする


概要

JIT:高スループット、実行時パフォーマンスボーナス、より高速で動作可能、動的にコードを生成できるが、起動は比較的遅く、JITレイヤー機構を起動するには一定の時間と呼び出し頻度が必要だ
AOT:低メモリ使用量、高速起動速度、実行時間を動かさずに最終プログラムに直接リンクできるが、実行時のパフォーマンスボーナスはなく、プログラムの実行に応じてさらに最適化することはできません



参考:

ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。





先の:.NET/C# 高性能は複数のファイルを1つのファイルに統合します
次に:.NET/C#コレクションリスト、HashSetで要素にベンチマークがあるかどうかを判定します
 地主| 掲載地 2024/03/10 10:58:59 |
.NET/C# Roslynコンパイラプラットフォーム
https://www.itsvse.com/thread-10740-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com