私は C#/Java が初めてで、ソフト リアルタイム システム用にプロトタイプを作成する予定です。
メモリ管理に関して C++ で行うのと同じように C#/Java アプリを作成した場合、つまり、使用しなくなったオブジェクトを明示的に「削除」した場合、アプリはガベージ コレクターの影響を受けますか? もしそうなら、それは私のアプリにどのように影響しますか?
これが明白な答えのように聞こえる場合は申し訳ありませんが、新しいので、徹底したいと思います。
私は C#/Java が初めてで、ソフト リアルタイム システム用にプロトタイプを作成する予定です。
メモリ管理に関して C++ で行うのと同じように C#/Java アプリを作成した場合、つまり、使用しなくなったオブジェクトを明示的に「削除」した場合、アプリはガベージ コレクターの影響を受けますか? もしそうなら、それは私のアプリにどのように影響しますか?
これが明白な答えのように聞こえる場合は申し訳ありませんが、新しいので、徹底したいと思います。
ハードリアルタイム システム用のガベージ コレクタであるIBM の Metronomeを見てください。
あなたの前提は間違っています。Java でも C# でも、オブジェクトを明示的に「削除」することはできないため、アプリケーションは常に GC の影響を受けます。
GC.Collect
適切なパラメーター (例: GC.MaxGeneration
)を指定して (C#) を呼び出してコレクションをトリガーしようとすることはできますが、実行中の他の瞬間に GC が動作しないという保証はありません。
オブジェクトへの参照を解放することを意味する場合、明示的に「削除」することにより、C# マネージ コードのガベージ コレクターに依存することになります。それを制御する方法については、System.GC クラスを参照してください。
アンマネージ C# コードを記述することを選択した場合、C++ と同様にメモリをより細かく制御でき、インスタンス化されたオブジェクトを削除したり、ポインターを使用したりできます。詳細については、MSDN doc - Unsafe Code and Pointers ( C# プログラミング ガイド) .
アンマネージ コードでは、ガベージ コレクターとその不確定なクリーンアップ アルゴリズムに翻弄されることはありません。
Java に同等の非管理モードがあるかどうかはわかりませんが、この Microsoft 情報は、C#/.NET で使用可能な機能を使用して、ガベージ コレクターを処理するという要件を満たすための指示を提供するのに役立つかもしれません。
Csharp または Java では、オブジェクトを削除できません。できることは、それらを削除可能としてマークすることだけです。メモリの解放は、ガベージ コレクターによって行われます。アプリケーションの存続期間中、ガベージ コレクターが実行されない場合があります。ただし、実行される可能性があります。システムのリソースが不足しているときは、GC ルーチンがランタイムによって実行される可能性が最も高い時期です。また、リソースが少ない場合、GC が最も優先度の高いスレッドになります。したがって、アプリケーションは有効になります。ただし、アプリケーションの有効期間に対して正しい負荷と必要なリソースを計算することで影響を最小限に抑えることができ、そのために十分な適切なハードウェアを購入するようにしてください。しかし、パフォーマンスをベンチマークするだけでは不十分です。
GC だけでなく、マネージ アプリケーションは、追加の委任レイヤーが関与するため、従来の C++ アプリケーションよりもわずかにオーバーヘッドがかかります。また、アプリケーションを開始する前にランタイムを起動して実行する必要があるため、初めてのパフォーマンスに関するわずかな問題があります。
.net コンパクト フレームワークを使用してリアルタイム システムを開発するためのリファレンスを次に示します。
どちらも、.net フレームワークを使用するためのメモリ要件について語っています。
C# と Java はリアルタイム開発用ではありません。ただし、お気づきのように、ソフトリアルタイムは達成可能です。
C# の場合、ファイナライズ/ディスポーズ パターンを実装するのが最善の方法です。
http://msdn.microsoft.com/en-us/library/b1yfkh5e(VS.71).aspx
収集するように要求できますが、通常、これを行う方法を決定する方がはるかに優れています。
http://msdn.microsoft.com/en-us/library/system.gc(VS.71).aspx
Java の場合、最適化するための多くのオプションがあります。
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
上記の IBM Metronome などのサードパーティ ソリューションと共に。
これは、CS 自体の真の科学です。