問題タブ [memory-fragmentation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
808 参照

java - 断片化された記憶はどのように見えますか?

時間の経過とともに速度が低下するモバイル アプリケーションがあります。私の推測では (この記事の一部を参考にしています)、これはメモリの断片化が原因でアプリの速度が低下しているということですが、よくわかりません。これは、時間の経過に伴うアプリのメモリ使用量のきれいなグラフです。

フラグルロック http://kupio.com/image-dump/fragmented.png

グラフの 4 つのピークは、アプリでまったく同じタスクを 4 回実行したことを示しています。タスクを開始すると、大量のメモリが割り当てられ、しばらく待機してから (上の平らな線)、タスクを停止します。その時点で System.gc(); を呼び出します。そしてメモリがクリーンアップされます。

ご覧のとおり、まったく同じタスクを 4 回実行すると、実行に時間がかかります。グラフの最低点はすべて同じレベルに戻るため、タスク実行間のメモリ リークはないようです。

私が知りたいのは、メモリの断片化は実行可能な説明ですか、それとも、すでに多くのことを調べたことを念頭に置いて、最初に他の場所を探すべきですか? グラフの最低点は比較的低いため、この状態では、問題の原因となる小さなメモリ ホールが多数存在することはあり得ないため、メモリがあまり断片化されていないと推測されます。

ただし、j2me メモリ アロケータがどのように機能するかはわかりません。誰でもアドバイスできますか?他の誰かがこれに問題を抱えていて、アプリのメモリ プロファイルを認識していますか?

0 投票する
3 に答える
1271 参照

c - プロセスでのメモリの断片化の問題の検出

プロセスの実行がメモリの断片化につながっているかどうかを検出するために使用できるさまざまなメカニズムは何ですか?

同じために利用できるツールはありますか?「C」コードで動作し、Windows、Linux、VxWorksで実行できるツールの提案が役立ちます。

0 投票する
1 に答える
608 参照

c++ - 設計アプローチ、文字列テーブル データ、変数、stl メモリ使用量

このような古い構造体クラスがtypedef vector<vector<string>> VARTYPE_T;あります。これは単一の変数として機能します。この変数は、リストの 1 つの値からテーブルのようなデータまで保持できます。座標 (x,y,z) のほとんどの値は、long、double、string、または double [3] です。必要に応じて変換するだけです。変数は、次のようなマップで管理されますmap<string,VARTYPE_T *>。文字列は変数名を保持します。確かに、それらはクラスにラップされています。また、ノードのツリーがあり、各ノードはこれらの変数マップの 1 つを保持できます。

これにVS 2008 SP1を使用すると、多くのメモリの断片化が検出されます。stlport を確認すると、stlport の方が高速 (20%) で、メモリ使用量が少ない (私のテスト ケースでは 30%) ようです。

質問は次のとおりです。適切に使用された高速メモリでこの要件を解決するための最良の実装は何ですか? プール アロケーターのような独自のアロケーターを作成する必要があります。これをどうしますか?

前もって感謝します、

ハウィー

0 投票する
3 に答える
3666 参照

c++ - たくさんの小さなオブジェクトを割り当て/解放する戦略

私は特定のキャッシングアルゴリズムをいじっていますが、これはやや困難です。基本的に、マップされた値を介してアクセス可能なオブジェクトを使用して、多数の小さなオブジェクト(double配列、1〜256要素)を割り当てる必要がありますmap[key] = array。アレイを初期化するまでの時間は非常に長く、通常は1万CPUサイクルを超える場合があります。

ロットとは、合計で約ギガバイトを意味します。オブジェクトは、必要に応じて、通常はランダムな場所で、一度に1つのオブジェクトをポップ/プッシュする必要がある場合があります。オブジェクトの存続期間は一般に長く、数分以上ですが、プログラムの期間中にオブジェクトが数回割り当て/割り当て解除される場合があります。

妥当な割り当て解除速度を維持しながら、メモリの断片化を回避するための適切な戦略は何でしょうか。

私はC++を使用しているので、newとmallocを使用できます。ありがとう。

私はウェブサイトに同様の質問があることを知っています。多くの短命の小さなオブジェクトを効率的に割り当てることは多少異なります。スレッドセーフは私にとって当面の問題ではありません。

私の開発プラットフォームは、LinuxオペレーティングシステムのIntelXeonです。理想的にはPPCLinuxでも作業したいのですが、それは私にとって最も重要ではありません。

0 投票する
1 に答える
1558 参照

ios4 - iOSはメモリの断片化をどのように解決しますか?

iOSのメモリ管理に関するドキュメントが見つかりませんでした。特にメモリの断片化について。これに関する文書をご存知の場合は、お知らせください。

0 投票する
3 に答える
773 参照

garbage-collection - ガベージコレクターのコピー

コピーガベージコレクターはどのようにしてメモリの断片化を回避しますか?また、ヒープスペースの使用にはどのような影響がありますか?

私の理解では、ガベージコレクターをコピーすると、到達可能なすべてのオブジェクトがヒープからヒープの別のセクションにコピーされます。取り残されたすべてのオブジェクトは不要になり、削除されます。

これが正しい理解である場合、これはどのようにしてメモリの断片化を回避しますか?

このプロセスでは、コピーしたすべてのアイテムが複製されるため、多くのヒープスペースを使用する必要があります。

0 投票する
5 に答える
18687 参照

c++ - パフォーマンスとタイム クリティカルな C++ アプリケーションに最適なメモリ割り当てアルゴリズムはどれですか?

ゲーム エンジンや組み込みアプリケーションなどのパフォーマンスが重要なアプリケーションで、どのメモリ割り当てアルゴリズムがより良い結果をもたらすかを判断するために、この質問をします。結果は実際には、断片化されたメモリの割合とメモリ要求の時間決定論に依存します。

教科書にはいくつかのアルゴリズムがあります (例: Buddy メモリ割り当て) が、TLSF のようなものもあります。したがって、利用可能なメモリ割り当てアルゴリズムに関して、どれが最速で断片化が少ないか. ところで、ガベージコレクターは含まれるべきではありません。

また、この質問はプロファイリングに関するものではなく、特定の要件に最適なアルゴリズムを見つけることを目的としていることにも注意してください。

0 投票する
3 に答える
1556 参照

c++ - windbg ヒープの要約からガベージを出力する

まず、私の英語は苦手です。ごめんなさい。私は英語圏に住んでいません。

質問があります。

Windowsサーバープログラムのメモリ断片化を行っています。メモリ不足のため、1 週間以上実行できません。それは問題かもしれません。

そこで、windbg で '.heap -s address(ヒープハンドル)' コマンドでメモリ解析をヒープしていました。しかし、私はこのレポートを理解していません。それを見てください。

仮想アドレスの断片化にはガベージ値があります。どうしたの??適正値ですか??

計画しました。パフォーマンスの向上を検証しようとしました。また、問題があるかどうかを判断します。しかし、この問題があるため、できません。

いろいろな記事を検索してみました。しかし、有益な情報を得ることができませんでした。

私を助けてください。

まず、なぜそれが起こったのですか?

第二に、メモリをより効果的に使用するための方法はありますか?

たぶん、あなたは私の投稿を読んで難しいです。知っている。本当に本当にごめんなさい。

私の投稿を読んでくれてありがとう。

0 投票する
3 に答える
2201 参照

c - valgrind によって示される余分なヒープ プログラム メモリ消費量

私のプログラムは大量のメモリを使用します。これは valgrind massif ツールが私に示しているものです:

ご覧のとおり、余分な部分は有用なヒープの数倍の大きさです。

この余分なメモリを減らすにはどうすればよいですか? 少ない割り当てを行いますか?

これはいわゆるメモリの断片化ですか?

OS: Linux 2.6。プログラムは C で書かれています。24 時間年中無休で動作し、大量のデータを操作します。

0 投票する
3 に答える
5698 参照

c# - バイト配列を使用する場合のヒープの断片化

大量のデータをチャンクで転送するC#4.0アプリケーション(単一のプロデューサー/単一のコンシューマー)があります。新しいメモリ割り当てはありませんが、しばらくするとメモリが不足します。

Redgateメモリプロファイラーを使用してメモリのプロファイルを作成しましたが、そこには多くの空きメモリがあります。断片化のため、空きメモリを使用できないと表示されます。

バッファとしてブロッキングコレクションを使用し、メンバーとしてバイト配列を使用します。

管理されたメモリの断片化を回避するにはどうすればよいですか?