.NET CLR は、任意の .NET プログラミング言語で記述されたコードを管理および実行するランタイム環境です。 CLR は、.NET Framework の仮想マシン コンポーネントです。その言語のコンパイラは、.NET 準拠言語を使用して開発されたアプリケーションのソース コードを、MSIL と呼ばれる CLR の中間言語、つまり Microsoft 中間言語コードにコンパイルします。このコードはプラットフォームに依存しません。 Java のバイト コードに相当します。メタデータは、コンパイルおよび MSIL コード中にも生成され、マニフェスト ファイルと呼ばれるファイルに保存されます。このメタデータは通常、MSIL コードを実行するために CLR が必要とするメンバーと型に関するものです。 CLR のジャストインタイム コンパイラ コンポーネントは、MSIL コードをマシンのネイティブ コードに変換します。このコードはプラットフォームに依存します。 CLR は、メモリ、スレッド、例外、コードの実行、コードの安全性、検証、コンパイルを管理します。
Javaの文字列結合
次の図は、ソース コードからネイティブ コードへの変換を示しています。
上図 コードを CPU が実行できるネイティブ コードに変換します。
CLR の主なコンポーネントは次のとおりです。
- 共通型システム
- 共通言語の種化
- ガベージコレクター
- ジャストインタイムコンパイラ
- メタデータとアセンブリ
1. 一般的なタイプ システム:
CTS は、実行時のデータ型の宣言、使用、管理に関するガイドラインを提供します。言語を超えたコミュニケーションを提供します。たとえば、VB.NET には整数データ型があり、C# には整数を管理するための int データ型があります。コンパイル後、両方のデータ型で Int32 が使用されます。したがって、CTS はマネージ コードを使用してデータ型を提供します。共通の型システムは、言語に依存しないコードの作成に役立ちます。
タイプの 2 つのカテゴリが提供されます。
2. 共通言語仕様 (CLS):
共通言語仕様 (CLS) には、NET でサポートされるすべての言語が従うべき一連のルールが含まれています。共通ルールにより、言語統合の実装が容易になり、言語間の継承とデバッグが容易になります。 NET Framework でサポートされる各言語には、独自の構文ルールがあります。ただし、CLS は、NET 言語を使用して開発されたアプリケーション間の相互運用性を保証します。
3. ガベージコレクション:
ガベージ コレクターは、自動メモリ マネージャーとして機能する CLR のコンポーネントです。要件に応じてメモリを自動的に割り当てることで、メモリの管理に役立ちます。オブジェクトにヒープ メモリを割り当てます。オブジェクトが使用されていない場合は、将来の使用に備えてオブジェクトに割り当てられたメモリが再利用されます。また、あるオブジェクトが別のオブジェクトのコンテンツを使用できないようにすることで、オブジェクトの安全性も確保します。
4. ジャストインタイム (JIT) コンパイラー:
JIT コンパイラは CLR の重要なコンポーネントです。 MSIL コードをネイティブ コード (つまり、マシン固有のコード) に変換します。 .NET プログラムは、明示的または暗黙的にコンパイルされます。開発者またはプログラマは、特定のコンパイラを呼び出して、明示的コンパイルでプログラムをコンパイルします。暗黙的コンパイルでは、プログラムは 2 回コンパイルされます。ソース コードは、最初のコンパイル プロセス中に Microsoft Intermediate Language (MSIL) にコンパイルされます。 MSIL コードは、2 回目のコンパイル プロセスでネイティブ コードに変換されます。このプロセスは JIT コンパイルと呼ばれます。 JIT コンパイラには、Pre、Econo、Normal の 3 種類があります。 Pre JIT Compiler は、実行前に MSIL コード全体をネイティブ コードにコンパイルします。 Econo JIT Compiler は、実行中に必要な MSIL コードの部分のみをコンパイルし、不要になった部分を削除します。通常の JIT コンパイラーも、実行中に必要な MSIL コードの部分のみをコンパイルしますが、将来の使用に備えてキャッシュに保存します。すでに使用されている部分はキャッシュ メモリに配置されているため、再コンパイルする必要はありません。
5. Metadata:
メタデータはプログラムに関するバイナリ情報で、MSIL コードとともに CLR ポータブル実行可能ファイル (PE) またはメモリに保存されます。 MSIL の実行中に、クラスおよび関連するものを適切に解釈するために、メタデータもメモリに読み込まれます。コードで使用される情報。したがって、メタデータは、言語に依存しない方法でコードを実装したり、言語の相互運用性を実現したりするのに役立ちます。
6. アセンブリ:
アセンブリは、物理コードのグループ化の基本単位です。これは、アセンブリ マニフェスト、メタデータ、MSIL コード、およびイメージ ファイルなどの一連のリソースで構成されます。また、基本的な展開単位、バージョン管理、再利用、セキュリティ権限などともみなされます。
.NET CLR関数
CLR の機能は次のとおりです。
- プログラムをネイティブ コードに変換します。
- 例外を処理する
- タイプセーフティを提供します
- メモリ管理
- セキュリティを提供します
- パフォーマンスを向上させた
- 言語に依存しない
- プラットフォームに依存しない
- ガベージコレクション
- オブジェクト指向プログラムの継承、インターフェイス、オーバーロードなどの言語機能を提供します。
CLR で実行されるコードはマネージド コードと呼ばれ、CLR の外部のコードはアンマネージド コードと呼ばれます。 CLR は、マネージド コードとアンマネージド コードの両方の相互運用を可能にする相互運用性レイヤーも提供します。
1. マネージ コード:
.NET Framework で記述された言語はすべてマネージ コードです。マネージ コードでは CLR を使用します。CLR は、メモリの管理、セキュリティの処理、言語間のデバッグの許可などによってアプリケーションを管理します。マネージ コードのプロセスを次の図に示します。
2. アンマネージ コード:
.NET Framework の外部で開発されたコードは、アンマネージ コードと呼ばれます。 CLR の制御下で実行されないアプリケーションは、管理対象外であると言われます。 C++ などの特定の言語は、オペレーティング システムの低レベル アクセス関数などのアプリケーションを作成するために使用できます。 VB、ASP、COM とのバックグラウンド互換性は、アンマネージ コードの例です。このコードは、ラッパー クラスの助けを借りて実行されます。アンマネージ コードのプロセスを以下に示します。
.NET CLRのバージョン
CLR は、パフォーマンスを向上させるために自らを随時更新します。
.NETバージョン | CLRバージョン |
---|---|
1.0 | 1.0 |
1.1 | 1.1 |
2.0 | 2.0 |
3.0 | 2.0 |
3.5 | 2.0 |
4 | 4 |
4.5 | 4 |
4.6 | 4 |
4.6 | 4 |
.NET CLR 構造
共通言語ランタイムのコンポーネント構造は次のとおりです。
基本クラスライブラリのサポート
.NET アプリケーションのクラスをサポートするクラス ライブラリです。
スレッドのサポート
マルチスレッド アプリケーションの並列実行を管理します。
COMマーシャラー
COM オブジェクトとアプリケーション間の通信を提供します。
セキュリティエンジン
セキュリティ制限を強制します。
デバッグエンジン
これにより、さまざまな種類のアプリケーションをデバッグできます。
タイプチェッカー
アプリケーションで使用される型をチェックし、それらが CLR によって提供される標準と一致することを検証します。
コードマネージャー
実行実行時にコードを管理します。
ガベージコレクター
未使用のメモリを解放し、新しいアプリケーションに割り当てます。
例外ハンドラ
実行時に例外を処理して、アプリケーションの障害を回避します。
クラスローダー
実行時にすべてのクラスをロードするために使用されます。