1. ホーム
  2. Web プログラミング
  3. ASP.NET

ネットのメモリ管理に関する5つの基本

2022-01-14 22:37:19

1. スモールオブジェクトはどのように扱われるのか?

小さい NET オブジェクトは、スモールオブジェクトヒープ ( SOH )をヒープ上に置く。第0世代、第1世代、第2世代の3つがあります。オブジェクトはその寿命に応じて上に移動する。

新しいオブジェクトをGen 0に配置します。 Gen 0が一杯になると、.NETガベージコレクタ(GC)が実行され、不要になったオブジェクトを廃棄し、それ以外のものをすべて Gen1 . Gen 1 が一杯になると、GC は再び実行され、Gen 1 から Gen 2 へオブジェクトを移動させることもできます。

いつ Gen 2 が満杯になると GC がフル稼働します。これにより、不要な Gen 2 オブジェクトを作成し Gen 1 オブジェクトを Gen 2 を移動させ、さらに Gen 0 オブジェクトを Gen 1 に移動し、最後に参照されないコンテンツをクリアします。を実行するたびに GC の後に、まだ使用されているメモリをまとめておくために、影響を受けるヒープを圧縮します。

この世代別アプローチにより、時間のかかる圧縮処理は絶対に必要な場合のみ行われるため、効率的な運用が可能になります。

注意事項 を使用している場合は Gen 2 が表示された場合、メモリが長時間確保されていることを意味し、メモリに問題がある可能性があります。そこで便利なのが、メモリ解析ツールです。

2. 大きなオブジェクトはどうなるのか?

よりも大きいです。 85 KB オブジェクトはラージオブジェクトヒープに割り当てられます ( LOH ). 大きなメモリチャンクをコピーするオーバーヘッドがあるため、圧縮されない。完全な GC が発生すると、未使用の LOH オブジェクトのアドレス範囲は、使用可能な領域割り当てテーブルに記録されます。

新しいオブジェクトを割り当てた後、そのオブジェクトを保持するのに十分なアドレス範囲が、この利用可能領域テーブルでチェックされます。存在すればそこに割り当てられ、存在しなければ次の空きスペースに割り当てられる。

オブジェクトが空のアドレス範囲と同じサイズになることはまずないので、ほとんどの場合、オブジェクトの間に小さなメモリのチャンクが残り、フラグメンテーションが発生します。もしこれらのチャンクが 85 KB となると、再利用の可能性はまったくない。したがって、割り当ての必要性が高まると、断片化された領域がまだ利用可能であっても、新しいセグメントが確保されます。

さらに、大きなオブジェクトを割り当てる必要がある場合、.NETは依然として、高価な Gen 2 GC . これはパフォーマンス的には良いのですが、メモリの断片化を引き起こす大きな原因となっています。

3. ガベージコレクタは、パフォーマンスを最適化するために異なるモードで実行することができます

.NETは、パフォーマンスを最適化するためにさまざまなモードで実行することができます /h2

.NETでは、パフォーマンスを最適化するために、ガベージコレクタを GC .NETは、パフォーマンスとヒープ効率のトレードオフに対処するため

Workstation mode provides maximum responsiveness for users and reduces pauses due to GC. It can be run as "concurrent" or "non-concurrent", meaning that running
GC
threads. The default value is concurrent, which uses a separate thread for GC, so the application can run the
GC
continues to execute while the
Server mode provides maximum throughput, scalability, and performance for server environments. In server mode, segment sizes and generation thresholds are typically much larger than in workstation mode, reflecting the higher demands placed on the server.
Server mode runs garbage collection in parallel on multiple threads, allocating a separate SOH and LOH for each logical processor to prevent threads from interfering with each other.
NET
framework provides a cross-referencing mechanism, so objects can still refer to each other across the heap. However, since application responsiveness is not a direct target of the server model, all application threads will be hung during GC.
4. Under-referencing can be a tradeoff between performance and memory efficiency
Weak objects referenced by
GC
alternative source of roots, allowing you to keep objects while allowing you to collect them when GC requires them. They are a compromise between code performance and memory efficiency. Creating objects takes up
CPU
time, but memory is required to maintain the loaded state.
Weak references are especially useful for large data structures. For example, suppose you have an application that allows users to browse large data structures, and they may return some of that data. You can convert any strong reference to a weak reference to the structure they are browsing. If the user returns to these structures, they can use them, but if not, the GC can reclaim memory as needed.
5. Object fixes can create references that are passed between managed and unmanaged code
NET
Use a method called
GCHandle
structure to keep track of heap objects.
The GCHandle
can be used to pass object references between managed and unmanaged domains, .NET maintains a
GCHandles
table for this purpose.
The GCHandle
There are four types, including fixed, for fixing objects to specific addresses in memory.
The main problem with object fixation is that it can lead to
SOH
fragmentation. If the object is fixed in
GC
period, then by definition the object cannot be relocated. Depending on how you use the fix, it will reduce the efficiency of the compression and leave gaps in the heap. The best strategy to avoid this is to lock and then release in a very short period of time.
This article on the five fundamentals of Net memory management is all about this. For more information on the five fundamentals of Net memory management, please search the previous articles in the Codedevlib or continue to browse the related articles below.