タグ付けされた質問 「memory-management」

可能であれば、公平でリクエスター間のスターベーションがないプログラム要求に応答するために、物理メモリーの一部を動的に割り当てて解放するプロセス。


20
GC.Collect()を使用することの何が問題になっていますか?
私はこの機能を使用することの深刻な影響を理解しています(または少なくともそれが私が思うことです)が、なぜそれが、立派なプログラマーがこれまで使用しないこれらの事柄の1つになっているのか、知らない人であっても理解できませんそれが何のためにあるのか。 ユーザーが何をしているかによってメモリ使用量が極端に異なるアプリケーションを開発しているとしましょう。アプリケーションのライフサイクルは、編集とリアルタイム処理の2つの主要な段階に分けることができます。編集の段階で、何十億、または何兆ものオブジェクトが作成されたとします。それらのいくつかは小さく、いくつかはそうでない、いくつかはファイナライザを持っているかもしれないし、いくつかは持っていないかもしれません、そしてそれらの寿命が非常に数ミリ秒から長い時間まで変化すると仮定します。次に、ユーザーはリアルタイムステージに切り替えることを決定します。この時点で、パフォーマンスが基本的な役割を果たしており、プログラムのフローのわずかな変更が壊滅的な結果をもたらす可能性があると想定します。オブジェクトの作成は、オブジェクトプールなどを使用することで可能な限り最小限に抑えられますが、GCは予期せずにチャイムし、すべてを捨てて誰かが死にます。 質問:この場合、第2ステージに入る前にGC.Collect()を呼び出すのは賢明ではないでしょうか。 結局のところ、これら2つの段階は互いに時間的に重複することは決してなく、GCが収集できたすべての最適化と統計はここではほとんど役に立ちません... 注:一部の方が指摘したように、.NETはこのようなアプリケーションに最適なプラットフォームではないかもしれませんが、それはこの質問の範囲を超えています。その目的は、GC.Collect()呼び出しがアプリケーションの全体的な動作/パフォーマンスを改善できるかどうかを明確にすることです。あなたがそのようなことを行う状況は非常にまれであることに私たちは皆同意しますが、GCはほとんどの場合、推測を試み、それを完全にうまく行いますが、それはまだ推測についてです。 ありがとう。

4
仮想メモリと物理メモリの違いは何ですか?
オペレーティングシステムの仮想化の概念とよく混同されます。RAMを物理メモリとして考えると、なぜプロセスを実行するために仮想メモリが必要なのでしょうか。 この仮想メモリは、外部ハードドライブからのプロセス(プログラム)が実行のためにメインメモリ(物理メモリ)に移動されたときにどこに存在しますか。 誰が仮想メモリを管理し、仮想メモリのサイズはどれくらいですか? RAMのサイズが4GB(つまり、2 ^ 32-1アドレス空間)である場合、仮想メモリのサイズはどれくらいですか?

4
記憶に関してアリーナという用語の意味は何ですか?
私はプログラミングの概念としてメモリに関する本を読んでいます。後の章の1つでは、作者は「アリーナ」という単語を多用していますが、決して定義していません。私は単語の意味とそれが記憶にどのように関連するかを検索しましたが、何も見つかりませんでした。以下は、著者が用語を使用するいくつかのコンテキストです。 「シリアライゼーションの次の例には、特定の分野からのメモリ割り当てと呼ばれる戦略が組み込まれています。」 「...これは、メモリリークを処理するとき、または特定の領域から割り当てるときに役立ちます。」 「...メモリの割り当てを解除する場合は、アリーナ全体の割り当てを解除します。」 著者は、1つの章で100回を超える用語を使用しています。用語集での唯一の定義は次のとおりです。 アリーナからの割り当て-最初にアリーナを割り当て、次にプログラム自体(プロセスメモリマネージャーではなく)によってアリーナ内の割り当て/割り当て解除を管理する手法。複雑なデータ構造とオブジェクトの圧縮とシリアル化、または安全が重要なシステムやフォールトトレラントシステムのメモリ管理に使用されます。 これらのコンテキストを与えられた誰かが私のためにアリーナを定義できますか?

10
ページのメモリ使用量を見つけるためのjQueryまたはJavaScript
Webページまたはjqueryアプリケーションによって使用されているメモリの量を確認する方法はありますか? これが私の状況です: jqueryフロントエンドとJSONでデータを提供するRESTfulバックエンドを使用して、データ量の多いWebアプリケーションを構築しています。ページが一度読み込まれると、すべてがajaxを介して行われます。 UIは、UI内に複数のタブを作成する方法をユーザーに提供し、各タブには多くのデータを含めることができます。作成できるタブの数を制限することを検討していますが、メモリ使用量が特定のしきい値を超えた場合にのみ、タブを制限することをお勧めします。 答えに基づいて、私はいくつかの明確化をしたいと思います: アプリケーションがユーザーのブラウザーでのメモリ使用量に基づいてアクションを決定できるように、(開発ツールだけでなく)ランタイムソリューションを探しています。 DOM要素やドキュメントのサイズを数えるのは良い見積もりですが、イベントバインディング、data()、プラグイン、その他のメモリ内のデータ構造が含まれていないため、かなり不正確になる可能性があります。

7
ラージオブジェクトヒープの断片化
私が取り組んでいるC#/。NETアプリケーションは、遅いメモリリークに悩まされています。私はCDBをSOSと一緒に使用して何が起こっているのかを判断しようとしましたが、データが意味をなさないようです。 アプリケーションは64ビットフレームワークで実行されています。リモートホストへのデータを継続的に計算してシリアル化し、ラージオブジェクトヒープ(LOH)にかなりのビットをヒットしています。ただし、一時的なものであると予想されるほとんどのLOHオブジェクト:計算が完了してリモートホストに送信されたら、メモリを解放する必要があります。しかし、私が見ているのは、メモリの空きブロックでインターリーブされた多数の(ライブ)オブジェクト配列です。たとえば、LOHからランダムセグメントを取得します。 0:000> !DumpHeap 000000005b5b1000 000000006351da10 Address MT Size ... 000000005d4f92e0 0000064280c7c970 16147872 000000005e45f880 00000000001661d0 1901752 Free 000000005e62fd38 00000642788d8ba8 1056 <-- 000000005e630158 00000000001661d0 5988848 Free 000000005ebe6348 00000642788d8ba8 1056 000000005ebe6768 00000000001661d0 6481336 Free 000000005f214d20 00000642788d8ba8 1056 000000005f215140 00000000001661d0 7346016 Free 000000005f9168a0 00000642788d8ba8 1056 000000005f916cc0 00000000001661d0 7611648 Free 00000000600591c0 00000642788d8ba8 1056 00000000600595e0 …

7
Eclipseに512Mより多くのメモリを与えるにはどうすればよいですか?
私は次の設定をしていますが、1024を入れてすべての512を1024に置き換えると、Eclipseがまったく開始されません。Eclipse JVMに512Mを超えるメモリを搭載するにはどうすればよいですか? -startup plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519 -product com.springsource.sts.ide --launcher.XXMaxPermSize 512M -vm C:\Program Files (x86)\Java\jdk1.6.0_18\bin\javaw -vmargs -Dosgi.requiredJavaVersion=1.5 -Xms512m -Xmx512m -XX:MaxPermSize=512m


7
NSAutoreleasePool自動解放プールはどのように機能しますか?
私が理解しているように、alloc、new、またはcopyで作成されたものはすべて手動で解放する必要があります。例えば: int main(void) { NSString *string; string = [[NSString alloc] init]; /* use the string */ [string release]; } しかし、私の質問は、これは同じように有効ではないでしょうか?: int main(void) { NSAutoreleasePool *pool; pool = [[NSAutoreleasePool alloc] init]; NSString *string; string = [[[NSString alloc] init] autorelease]; /* use the string */ [pool drain]; }

2
Swiftプログラムでautoreleasepoolを使用する必要はありますか?
このWWDC14プレゼンテーションの 17ページで、 Objective-Cを使用していますか?まだ自動解放プールを管理する必要があります autoreleasepool {/ * code * /} どういう意味ですか?コードベースにObjective-Cファイルautoreleasepool {}がない場合、それは不要であることを意味しますか? 関連する質問の答えは、例がありautoreleasepool便利です。 - (void)useALoadOfNumbers { for (int j = 0; j < 10000; ++j) { @autoreleasepool { for (int i = 0; i < 10000; ++i) { NSNumber *number = [NSNumber numberWithInt:(i+j)]; NSLog(@"number = %p", number); } } } } …

3
「メモリストンプ」とは何ですか?
私は「記憶を踏み鳴らす」について言及しているこのブログ投稿に出くわしました: メモリを簡単に踏み付けることができるC ++プログラム(マネージコードの世界で生まれた場合、おそらく聞いたこともないもの) そして実際、私はそれについて聞いたことがありません! それで、これは何ですか、メモリを踏み鳴らして、メモリを踏みつけますか?いつ発生しますか?

10
C ++クラスのメモリ構造に「スペーサー」を作成するにはどうすればよいですか?
問題 ローレベルベアメタル埋め込みコンテキスト、私はそのようなアクセスメモリ位置にユーザを禁止するために、C ++構造内の任意の名前なしで、メモリ内の余白を作成したいです。 現在、私はuint32_t :96;3ワードの代わりになる醜いビットフィールドを配置することでそれを達成しましたが、GCC(ビットフィールドが大きすぎてuint32_tに収まらない)から警告が出されます。これはかなり合法です。 正常に動作しますが、数百の警告が含まれるライブラリを配布する場合は、それほどクリーンではありません... どうすれば適切に実行できますか? そもそもなぜ問題があるのですか? 私が取り組んでいるプロジェクトは、マイクロコントローラーライン全体(STMicroelectronics STM32)のさまざまな周辺機器のメモリ構造を定義することです。そうするために、結果は、対象となるマイクロコントローラーに応じて、すべてのレジスターを定義するいくつかの構造体の結合を含むクラスです。 非常に単純なペリフェラルの簡単な例は次のとおりです。汎用入出力(GPIO) union { struct { GPIO_MAP0_MODER; GPIO_MAP0_OTYPER; GPIO_MAP0_OSPEEDR; GPIO_MAP0_PUPDR; GPIO_MAP0_IDR; GPIO_MAP0_ODR; GPIO_MAP0_BSRR; GPIO_MAP0_LCKR; GPIO_MAP0_AFR; GPIO_MAP0_BRR; GPIO_MAP0_ASCR; }; struct { GPIO_MAP1_CRL; GPIO_MAP1_CRH; GPIO_MAP1_IDR; GPIO_MAP1_ODR; GPIO_MAP1_BSRR; GPIO_MAP1_BRR; GPIO_MAP1_LCKR; uint32_t :32; GPIO_MAP1_AFRL; GPIO_MAP1_AFRH; uint32_t :64; }; struct { uint32_t :192; GPIO_MAP2_BSRRL; GPIO_MAP2_BSRRH; uint32_t …


6
Cでmallocを使用する必要がある場合と使用しない場合
malloc()の仕組みを理解しています。私の質問は、私はこのようなものを見るでしょう: #define A_MEGABYTE (1024 * 1024) char *some_memory; size_t size_to_allocate = A_MEGABYTE; some_memory = (char *)malloc(size_to_allocate); sprintf(some_memory, "Hello World"); printf("%s\n", some_memory); free(some_memory); 簡潔にするために、エラーチェックを省略しました。私の質問は、メモリ内のいくつかの静的ストレージへのポインタを初期化することで上記のことを実行できないのですか?おそらく: char *some_memory = "Hello World"; どの時点で、保持する必要のある値を宣言/初期化する代わりに、実際にメモリを割り当てる必要がありますか?

14
まだ十分な空きメモリがあるときに「System.OutOfMemoryException」がスローされました
これは私のコードです: int size = 100000000; double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb double[] randomNumbers = new double[size]; 例外:タイプ「System.OutOfMemoryException」の例外がスローされました。 このマシンに4 GBのメモリを搭載していますが、この実行を開始すると2.5 GBは無料です。PCに100 000000の762 mbの乱数を処理するのに十分なスペースが明らかにあります。使用可能なメモリを考慮して、できるだけ多くの乱数を保存する必要があります。私が生産に行くとき、箱に12GBがあるでしょう、そしてそれを利用したいと思います。 CLRは、最初からデフォルトの最大メモリに制限していますか?どうすればもっとリクエストできますか? 更新 これを小さなチャンクに分割し、メモリ要件を徐々に追加すると、問題がメモリの断片化に起因する場合に役立つと思いましたが、blockSizeの調整に関係なく、ArrayListの合計サイズが256 MBを超えることはありません。 private static IRandomGenerator rnd = new MersenneTwister(); private static IDistribution dist = new DiscreteNormalDistribution(1048576); private static List<double> ndRandomNumbers …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.