タグ付けされた質問 「garbage-collection」

ガベージコレクション(GC)は、自動メモリ管理の一種であり、ガベージ、またはプログラムで使用されなくなったオブジェクトによって占有されているメモリを再利用しようとします。

2
C#でイベントハンドラーを明示的に削除する必要がありますか
いくつかのイベントを提供するクラスがあります。そのクラスはグローバルに宣言されますが、そのグローバル宣言ではインスタンス化されません。それは、それを必要とするメソッドで必要に応じてインスタンス化されます。 メソッドでそのクラスが必要になるたびに、インスタンス化され、イベントハンドラーが登録されます。メソッドがスコープ外になる前に、イベントハンドラーを明示的に削除する必要がありますか? メソッドがスコープから外れると、クラスのインスタンスも外れます。スコープ外になるそのインスタンスに登録されたイベントハンドラーを残すと、メモリフットプリントに影響がありますか?(イベントハンドラーが、GCがクラスインスタンスを参照されていないものと見なさないようにしているのかと思います。)

15
C#でガベージコレクションを強制するためのベストプラクティス
私の経験では、ほとんどの人がガベージコレクションを強制するのは賢明ではないと言っているようですが、常に0世代で収集されるわけではないがメモリが問題になる大きなオブジェクトを操作している場合があります。強制的に収集してもよろしいですか?そのためのベストプラクティスはありますか?


16
System.gc()はいつ何かをしますか?
Javaではガベージコレクションが自動化されています。しかしSystem.gc()、コードを呼び出すと、その時点でJVMがガベージコレクションを実行するかどうかを判断できることを理解しました。これはどのように正確に機能しますか?JVMは、GCを検出したときに、GCを実行する(または実行しない)と正確にどの基準/パラメーターで判断しますSystem.gc()か? あなたのコードにこれを入れるのが良い場合の例はありますか?

6
Javaオブジェクトをnullに設定しても、もう何もしませんか?
古い本をいくつか見ていて、Peter Haggerによる "Practical Java"のコピーを見つけました。パフォーマンスのセクションでは、null不要になったときにオブジェクト参照を設定することをお勧めします。 Javaでは、オブジェクト参照を設定してnullパフォーマンスまたはガベージコレクションの効率を向上させますか?もしそうなら、どのような場合にこれは問題ですか?コンテナクラス?オブジェクト構成?匿名の内部クラス? これはコードでかなり頻繁に見られます。これは現在、古いプログラミングのアドバイスですか、それともまだ役に立ちますか?

5
Goはどのようなガベージコレクションを使用しますか?
Goはガベージコレクションされた言語です。 http://golang.org/doc/go_faq.html#garbage_collection ここでは、マークアンドスイープガベージコレクターであると述べていますが、詳細については掘り下げていません。代わりのものが現在準備中です...しかし、Goがリリースされて以来、この段落はあまり更新されていないようです。 それはまだマークアンドスイープですか?それは保守的ですか、それとも正確ですか。それは世代ですか?

11
用語の意味と概念を理解する-RAII(Resource Acquisition is Initialization)
C ++開発者に、RAIIとは何か、なぜそれが重要なのか、そして他の言語との関連性があるかどうかについての説明を教えていただけませんか? 私は少し知っています。「リソース獲得は初期化」の略だと思います。ただし、その名前は、RAIIが何であるか(おそらく正しくない)を理解しているとは言えません。RAIIはスタック上のオブジェクトを初期化する方法であり、これらの変数がスコープから外れると、デストラクターが自動的にリソースがクリーンアップされる原因となる。 それでは、なぜ「スタックを使用してクリーンアップをトリガーする」(UTSTTC :)と呼ばれないのですか?そこから「らい」までどうやって行くの? そして、スタック上に存在する何かのクリーンアップを引き起こすスタック上に何かをどのように作成できますか?また、RAIIが使えない場合はありますか?ガベージコレクションを希望していることはありますか?少なくとも、他のオブジェクトを管理しながら、いくつかのオブジェクトに使用できるガベージコレクターはありますか? ありがとう。

13
数百万の小さな一時オブジェクトを作成するためのベストプラクティス
何百万もの小さなオブジェクトを作成(およびリリース)するための「ベストプラクティス」とは何ですか? 私はJavaでチェスプログラムを書いており、検索アルゴリズムは可能な各移動に対して単一の「移動」オブジェクトを生成し、名目検索は1秒あたり100万以上の移動オブジェクトを簡単に生成できます。JVM GCは私の開発システムの負荷を処理することができましたが、次のような代替アプローチを模索しています。 ガベージコレクションのオーバーヘッドを最小限に抑える。 ローエンドシステムのピークメモリフットプリントを削減します。 オブジェクトの大部分は存続期間が非常に短いですが、生成された移動の約1%が永続化され、永続化された値として返されるため、プーリングまたはキャッシングテクニックでは、特定のオブジェクトの再利用を除外する機能を提供する必要があります。 私は完全に具体化されたサンプルコードを期待していませんが、さらに読んだり研究したりするための提案、または同様の性質のオープンソースの例をいただければ幸いです。

11
Androidのガベージコレクター
状況によってはガベージコレクターの呼び出しを示唆する多くのAndroidの回答を見てきました。 メモリを大量に消費する操作を行う前に、Androidでガベージコレクターを要求することは良い習慣ですか?そうでない場合は、OutOfMemoryエラーが発生したますか? ガベージコレクターに頼る前に他に使用すべきものはありますか?

9
シェルからガベージコレクションをどのように強制しますか?
だから私はリモートボックスのjmapでヒープを見ていて、それにガベージコレクションを強制したいです。jvisualvmやjconsoleなどに飛び込むことなく、これをどのように行うのですか? 私はあなたがガベージコレクションを強制する習慣になってはいけないことを知っています-ヒープが大きい/大きくなっている理由を理解すべきです。 また、System.GC()が実際にガベージコレクションを強制するのではなく、GCに発生を通知するだけであることがわかります。 とはいえ、これを簡単に行う方法はありますか?一部のコマンドラインアプリが不足していますか?

5
なぜ大きなオブジェクトヒープであり、なぜ私たちは気にするのですか?
ジェネレーションとラージオブジェクトヒープについて読みました。しかし、私はまだ大きなオブジェクトヒープを持つことの重要性(または利点)が何であるか理解できませんか? ラージオブジェクトを格納するためにCLRがジェネレーション2(Gen0およびGen1のしきい値が小さいことを考慮すると)に依存している場合、(パフォーマンスまたはメモリの観点から)何が問題になっている可能性がありますか?


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

3
ガベージコレクターは、ここで無限ループをどのように回避しますか?
次のC#プログラムについて考えてみましょう。ループなしのループを作成するための回答としてcodegolfに提出しました。 class P{ static int x=0; ~P(){ System.Console.WriteLine(++x); new P(); } static void Main(){ new P(); } } このプログラムは、私の検査では無限ループのように見えますが、数千回繰り返し実行されているように見え、プログラムはエラーなしで正常に終了します(エラーはスローされません)。P最終的にファイナライザが呼び出されないのは仕様違反ですか? 明らかにこれは馬鹿げたコードであり、決して表示されるべきではありませんが、プログラムがどのように完了するかについて私は興味があります。 オリジナルコードゴルフポスト:: /codegolf/33196/loop-without-looping/33218#33218

3
Javaガベージコレクションログメッセージ
ガベージコレクション情報をログにダンプするようにjavaを構成しました(詳細なGC)。ログのガベージコレクションエントリの意味がわかりません。これらのエントリのサンプルを以下に掲載します。私はグーグルで周りを検索しましたが、確かな説明は見つかりませんでした。 ある程度の推測はありますが、信頼できる情報源に裏付けられた、エントリの数値の意味を厳密に定義した回答を探しています。sunのドキュメントを引用するすべての回答に対する自動+1。私の質問は: PSYoungGenは何を指しますか?前世代とは関係があると思いますが、具体的には? 2番目のトリプレットと最初のトリプレットの違いは何ですか? 名前(PSYoungGen)が最初のトリプレットの数値に指定されていて、2番目のトリプレットに指定されていないのはなぜですか? トリプレットの各数値(メモリサイズ)はどういう意味ですか。たとえば、109884K-> 14201K(139904K)は、GC 109884kの前のメモリで、その後14201Kに削減されます。3番目の数字はどのように関連していますか?なぜ2番目の数値セットが必要なのでしょうか。 8109.128:[GC [PSYoungGen:109884K-> 14201K(139904K)] 691015K-> 595332K(1119040K)、0.0454530秒] 8112.111:[GC [PSYoungGen:126649K-> 15528K(142336K)] 707780K-> 605892K(1121472K)、0.0934560秒] 8112.802:[GC [PSYoungGen:130344K-> 3732K(118592K)] 720708K-> 607895K(1097728K)、0.0682690秒]

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