タグ

ブックマーク / nyaruru.hatenablog.com (4)

  • NyaRuRuの日記 - 十分に物理メモリを搭載しているにもかかわらずスワップアウトが発生する理由

    多くの人々は,Windows OS でのスワップアウトを「メモリが足りなくなったときの緊急回避」と考えているようです.実際,緊急退避的なスワップアウトも存在しますが,PC の搭載メモリが増えてきた現在では,しかし,もっと別の形でのスワップアウトの方が頻繁に起きるようになってきています.ここでは,より現実的なスワップアウトの姿を見てみることにしましょう. ある想像上のプログラムを考えます.そのプログラムは,300 MB のヒープを確保し,同時に 300 MB 程度のファイルのあちこちにランダムアクセスを繰り返すとします. Windows は,このアプリケーションを円滑に動作させるために,どのように物理メモリを提供するのでしょうか? アプリケーションが,ヒープに対するランダムアクセスのみを行い,ファイルアクセスはほとんど行わない場合 この場合,300 MB の物理メモリをヒープのために維持し続

    NyaRuRuの日記 - 十分に物理メモリを搭載しているにもかかわらずスワップアウトが発生する理由
  • UPX 圧縮するとメモリ使用量が増える事例 - NyaRuRuが地球にいたころ

    UPX 圧縮や .NETJava の JIT メカニズムは,実行イメージを実行時に展開するという共通点を持っています.これは必ずしもメリットばかりではありません.特にメモリについては,次のような影響が現れます. 同じ実行ファイルから複数のプロセスを生成するとき,ファイルイメージの共有によるメモリ使用量の削減効果が得にくい 実行時生成された実行イメージは,元のファイルとは異なるため,ページファイルに待避し直す必要がある 順に見ていきましょう. exe ファイルや dll ファイルは,メモリマップによってプロセス空間にマップされます.このとき,読み取り専用なセグメントや,まだ一度も書き換えられていないページは,実メモリ上に1つだけ実体を起き,アドレス変換によってプロセス間で共有することができます. Process Explorer を使用すると,プロセス中の DLL がどれぐらいワーキングセ

    UPX 圧縮するとメモリ使用量が増える事例 - NyaRuRuが地球にいたころ
    seltsam
    seltsam 2006/10/20
    メモリ管理 "Working Set" と "Private Working Set" Working Set には共有可能な部分も含まれる
  • タスクマネージャに表示されるメモリ使用量 - NyaRuRuが地球にいたころ

    以前 id:Kazzz さんも書かれてましたが,確かにこれはもっともな話だと思います. それほど神経質になる必要は無いのかもしれません、がしかしアプリケーションを実際に使うユーザである程度PCの知識があるユーザは、タスクマネジャで見た時に保持するメモリが多いと見るとこれを非常に嫌悪する傾向にあります。従ってワーキングセットを多く設定する場合はきちんとその理由を説明できないと問題になることがあるので疎かにはできないのです。 問題は,「ある程度PCの知識はあるが Windowsの仮想メモリ機構に関する十分な知識はないユーザ(及び開発者)」が,タスクマネージャに表示される「メモリ使用量」に過剰反応してしまうという事案にどう対処するか,というところにあります. 1つの無難な方法としては,デフォルトの動作は Conservative にし,Progressive な動作は上級ユーザを対象に Opt-

    タスクマネージャに表示されるメモリ使用量 - NyaRuRuが地球にいたころ
  • .NET GC & Memory (1) - NyaRuRuが地球にいたころ

    初心者向けにはしばしば「適当に回収してくれます」と説明される .NET の GC ですが,実際の GC は無作為に実行されるのではなく,あるアルゴリズムに従って動いており,「適当」という言葉でブラックボックス感を演出するのはあまり好きではありません.まあ適切で当然な「適当」だとしても,一意に定まるわけじゃないのでそこをぼかすのはまずいと思うわけですよ. 以下はいつぞやの GDNJ IDisposable 論争で挙げたもの*1を少しだけ書き直したものですが,手元の環境を含め Visual C# .NET 2003 + .NET Framework 1.1 SP1 という条件下でちらほら完走しない現象が再現できたようです. using System; using System.Diagnostics; class Program { static void Main(string args)

    .NET GC & Memory (1) - NyaRuRuが地球にいたころ
    seltsam
    seltsam 2006/06/30
  • 1