BT

Large Object Heap と.NET GC の改善

| 作者: Roopesh Shenoy フォローする 0 人のフォロワー , 翻訳者 編集部N フォローする 0 人のフォロワー 投稿日 2011年10月17日. 推定読書時間: 2 分 |

原文(投稿日: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氏によるこの記事 を読むとよい。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT