BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Large Object Heap と.NET GC の改善

Large Object Heap と.NET GC の改善

原文(投稿日:2011/10/12)へのリンク

メモリーを大量に使うアプリケーションを書いている.NET開発者は、 Large Object Heapアロケーションで何度も問題を経験しているだろう。全体的なメモリーは全く充分あるように見えるのに、メモリー不足例外になってしまう。.NET Framework 4.5は、より良いLOH管理とより少ないフラグメンテーションにより、この領域で改善することを 約束している

CLRはアロケーションに別々の2つのヒープ、small object heap (SOH) と large object heap (LOH)を管理している。 85,000バイト以上のアロケーションはLOH上に確保される。2つのヒープ間の違いについては これらの 記事が詳しい。LOHにおけるパフォーマンス上のトレードオフのために、大きなイメージ処理のような大量メモリーを必要とするアプリケーションはフラグメンテーションを起こし、メモリーの限界を使い切る前でもメモリー不足例外 になってしまう。

全メモリーのアロケーションに関しては、.NET 3.5 から 4.0ですでにある程度改善がなされている。上記の問題へのコメントの1つとして、.NET FrameworkのGCのリードプログラムマネージャである Brandon Bay氏は、言っている。

提供された例を基に話しますと、.NET 3.5 から 4.0で、LOHにおけるメモリー不足が発生する前に、アロケートできるメモリー量は約23倍になりました。

そして .NET 4.5更に良くなるようだ。

.NET 4.5では、LOHに2つの改善をしました。まず、ランタイムがフリーリストを管理する方法を著しく改善しましたので、フラグメントをずっと効果的に利用できます。メモリーアロケータは、以前は使うことができなかったメモリーフラグメントを再利用します。そして、 サーバーGC モードでは、ランタイムが各ヒープ間でLOHアロケーションのバランスを取ります。.NET 4.5より前では、SOHでしかバランスをとっていませんでした。両方の変更の結果、LOHアロケーションのベンチマークのいくつかで著しい改善を見ることができています。

詳細は、Brandon氏の 完全な投稿 にある。.NET FrameworkのGCについてもっと学びたければ MSDN DocumentationAndrew Hunter氏によるこの記事 を読むとよい。

この記事に星をつける

おすすめ度
スタイル

BT