S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

メモリ管理

LOH(Large Object Heap)なるメカニズムがあるのか…など。
メモリリークに関するリソース (Memory Leak, GC, Large Object Heap, LOH, ガベージコレクション) - いろいろ備忘録日記
世代管理はJavaでもあるしね。
で、オブジェクトとは別にクラスローダが使うパーマネント領域は、.NETではどうなんだろ?とか。

AccessViolationException

こいつは「アンマネージコード」でメモリリークがあった時にthrowされるらしいな。
MSDN > AccessViolationException クラス (System)

割り当てられていないメモリ、またはコードがアクセス権を持たないメモリに対して、コードが読み取りまたは書き込みを試行すると、アンマネージ コード (アンセーフ コード) でアクセス違反が発生します。通常、アクセス違反が発生するのは、ポインタの値が正しくないためです。不正なポインタによるすべての読み取りまたは書き込みがアクセス違反の原因になるわけではありません。アクセス違反は通常、不正なポインタによる複数の読み取りまたは書き込みが発生したことや、メモリが破損している可能性があることを示します。したがって、多くの場合、アクセス違反は深刻なプログラミング エラーを示しています。.NET Framework Version 2.0 では、AccessViolationException がこうした深刻なエラーを明確に示します。

全体が検証可能なマネージ コードで構成されているプログラムでは、すべての参照は有効または null のいずれかであるため、アクセス違反は起こり得ません。AccessViolationException は、検証可能なマネージ コードが、アンマネージ コード (アンセーフ マネージ コード) と対話する場合にのみ発生します。

利用している.NET FrameworkなDLLじゃないDLL(Win32 APIなどを直接利用したDLL)が原因で発生するってことか。