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

10
ガベージコレクションを強制するのはいつですか?
だから私は、C#ガベージコレクターを強制的に実行することについての質問を読んでいた。ほとんどすべての回答が同じである。残念ながら、そのようなケースについて詳しく説明している人はいません。 ガベージコレクションを強制するのは、実際にはどのようなシナリオで良いまたは合理的なアイデアであるかを教えてもらえますか? 私はC#固有のケースではなく、ガベージコレクターを備えたすべてのプログラミング言語を求めています。Javaのようなすべての言語でGCを強制することはできませんが、できると仮定しましょう。

6
Javaのスタックメモリとヒープメモリ
私が理解しているように、Javaでは、スタックメモリはプリミティブとメソッド呼び出しを保持し、ヒープメモリはオブジェクトの格納に使用されます。 クラスがあると仮定します class A { int a ; String b; //getters and setters } aクラスのプリミティブはどこAに格納されますか? ヒープメモリが存在するのはなぜですか?なぜすべてをスタックに保存できないのですか? オブジェクトがガベージコレクションされると、オブジェクトに関連付けられたスタックは破棄されますか?

6
ガベージコレクションは、ネイティブにコンパイルされた言語でどのように機能しますか?
スタックオーバーフローに関するいくつかの回答を参照した後、ネイティブコンパイルされた言語の一部にガベージコレクションがあることが明らかです。しかし、これが正確にどのように機能するかは私には不明です。 ガベージコレクションがインタプリタ言語でどのように機能するかを理解しています。ガベージコレクターは、単にインタープリターと一緒に実行され、プログラムのメモリから未使用および到達不能なオブジェクトを削除します。両方が一緒に実行されています。 しかし、これはコンパイルされた言語でどのように機能しますか?私の理解では、コンパイラがソースコードをターゲットコード(特にネイティブマシンコード)にコンパイルすると、完了します。その仕事は終わりました。それでは、コンパイルされたプログラムをどのようにガベージコレクションするのでしょうか? 「ガベージ」オブジェクトを削除するためにプログラムが実行されている間、コンパイラは何らかの方法でCPUと連携しますか?または、コンパイラは、コンパイルされたプログラムの実行可能ファイルに最小限のガベージコレクタを含めますか。 Stack Overflowに関するこの回答からの抜粋により、後者のステートメントは前者よりも妥当性があると思います: そのようなプログラミング言語の1つがEiffelです。ほとんどのEiffelコンパイラは、移植性の理由でCコードを生成します。このCコードは、標準Cコンパイラによってマシンコードを生成するために使用されます。Eiffel実装は、このコンパイルされたコードに対してGC(および場合によっては正確なGC)を提供します。VMは必要ありません。特に、VisualEiffelコンパイラーはネイティブのx86マシンコードをフルGCサポートで直接生成しました。 最後のステートメントは、プログラムの実行中にガベージコレクターとして機能するプログラムを最終的な実行可能ファイルにコンパイラが含めることを意味するようです。 ネイティブにコンパイルされ、オプションのガベージコレクタを備えたガベージコレクションに関するD言語のWebサイトのページも、ガベージコレクションを実装するために元の実行可能プログラムと一緒にバックグラウンドプログラムが実行されることを示唆しているようです。 Dは、ガベージコレクションをサポートするシステムプログラミング言語です。通常、メモリを明示的に解放する必要はありません。必要に応じて割り当てるだけで、ガベージコレクターはすべての未使用メモリを利用可能なメモリのプールに定期的に返します。 この方法は、上記の場合はされて使用され、どのように正確にそれが働くだろうか?コンパイラは、ガベージコレクションプログラムのコピーを保存し、生成する各実行可能ファイルに貼り付けますか? または、私は私の考えに欠陥がありますか?その場合、コンパイルされた言語のガベージコレクションを実装するためにどのメソッドが使用され、どのように正確に機能しますか

11
Javaオブジェクトが参照されなくなった直後に削除されないのはなぜですか?
Javaでは、オブジェクトに参照がなくなるとすぐに削除の対象になりますが、JVMはオブジェクトが実際に削除されるタイミングを決定します。Objective-Cの用語を使用する場合、すべてのJava参照は本質的に「強力」です。ただし、Objective-Cでは、オブジェクトに強参照がなくなった場合、オブジェクトはすぐに削除されます。なぜこれがJavaに当てはまらないのですか?

11
スマートポインターが存在する場合にガベージコレクションを行う理由
最近では、非常に多くの言語がガベージコレクションされています。サードパーティによってC ++でも利用可能です。しかし、C ++にはRAIIとスマートポインターがあります。それでは、ガベージコレクションを使用する意味は何ですか?何か特別なことをしていますか? また、C#などの他の言語では、すべての参照が仕様と実装によってスマートポインターとして扱われる場合(RAIIは別として)、ガベージコレクターの必要性はまだありますか?いいえの場合、なぜそうではないのですか?

16
Javaにはあるのに、CやC ++などの言語にガベージコレクションがないのはなぜですか?[閉まっている]
まあ、Cにはmalloc / free、C ++にはメモリ管理にnew / using-a-de-structorのようなものがあることは知っていますが、ユーザーがこれらの言語に「新しい更新」がないのはなぜだろうメモリを手動で管理するオプションがありますか、またはシステムが自動的にメモリを管理するオプションがあります(ガベージコレクション)。 やや新しい質問ですが、CSに約1年しかいません。

6
.Netで弱い参照を使用する場合
個人的に、.NetでWeakReference型を使用する必要がある状況に遭遇したことはありませんが、一般的な信念は、キャッシュで使用する必要があるということです。博士ジョン・ハロップは、彼の中にキャッシュ内WeakReferencesの使用に対して非常に良いケース与えた答えにこの質問を。 また、AS3開発者がメモリフットプリントを節約するために弱い参照を使用することについて話すことをよく耳にしましたが、私が持っていた会話に基づいて、意図した目標を必ずしも達成することなく複雑さを追加するようであり、ランタイムの動作はかなり予測不可能です。そのため、多くの人は単純にそれをあきらめ、代わりにメモリ使用量をより慎重に管理する/コードを最適化してメモリ集約度を下げます(またはCPUサイクルを増やしてメモリフットプリントを小さくします)。 Jon Harrop博士はまた、.Net弱参照はソフトではなく、gen0には弱参照の積極的なコレクションがあると彼の答えで指摘しました。MSDNによると、長い弱参照はオブジェクトを再作成する可能性を与えてくれますbut the state of the object remains unpredictable.! これらの特性を考えると、弱い参照が役立つ状況を考えることはできません。おそらく誰かが私を啓発できるでしょうか?

5
参照カウントのスマートポインターが人気があるのはなぜですか?
ご覧のとおり、スマートポインターは多くの実際のC ++プロジェクトで広く使用されています。 ある種のスマートポインターはRAIIと所有権の移行をサポートするために明らかに有益ですが、プログラマーが割り当てをそれほど考慮する必要がないように、「ガベージコレクション」の方法として共有ポインターをデフォルトで使用する傾向もあります。 Boehm GCのような適切なガベージコレクターを統合するよりも、共有ポインターの方が人気があるのはなぜですか?(または、実際のGCよりも人気があることにまったく同意しますか?) 参照カウントに対する従来のGCの2つの利点について知っています。 従来のGCアルゴリズムには、参照サイクルに関する問題はありません。 参照カウントは通常、適切なGC よりも遅くなります。 参照カウントスマートポインターを使用する理由は何ですか?

8
C ++のゴミはどうなりますか?
Javaには自動GCがあり、たまに世界を停止しますが、ヒープ上のゴミを処理します。現在、C / C ++アプリケーションにはこれらのSTWフリーズがなく、メモリ使用量も無限に増加しません。この動作はどのように達成されますか?死んだオブジェクトはどのように処理されますか?


8
スコープベースのメモリ管理の欠点
スコープベースのメモリ管理(SBMM)、またはRAIIは、C ++コミュニティでより一般的に(混乱して?)参照されるため、私は本当に気に入っています。私が知る限り、C ++(およびC)を除いて、SBMM / RAIIをメインメモリ管理メカニズムとする他の主流の言語は現在使用されておらず、代わりにガベージコレクション(GC)を使用しています。 これはかなりわかりにくい SBMMはプログラムをより決定的にします(オブジェクトがいつ破壊されるかを正確に知ることができます)。 GCを使用する言語では、多くの場合、手動でリソース管理を行う必要があります(たとえば、Javaでファイルを閉じるを参照)。これは、GCの目的を部分的に無効にし、エラーも発生しやすくなります。 ヒープメモリは(非常にエレガントに、imo)スコープにバインドすることもできます(std::shared_ptrC ++を参照)。 SBMMがより広く使用されないのはなぜですか?その短所は何ですか?

8
Object.finalize()のオーバーライドは本当に悪いですか?
オーバーライドに対する主な2つの引数Object.finalize()は次のとおりです。 いつ呼び出されるかを決めることはできません。 まったく呼び出されない場合があります。 私がこれを正しく理解していれば、Object.finalize()それがそんなに嫌いな十分な理由だとは思いません。 オブジェクトの割り当てを解除する適切なタイミングは開発者ではなく、VM実装とGCが決定します。いつObject.finalize()呼び出されるかを決めることが重要なのはなぜですか? 通常、私が間違っている場合は修正Object.finalize()しますが、GCが実行される前にアプリケーションが終了したときのみ呼び出されません。ただし、アプリケーションのプロセスが終了すると、オブジェクトは解放されます。だから、Object.finalize()それが呼び出される必要はなかったので、呼び出されませんでした。開発者が気にするのはなぜですか? 手動で閉じる必要のあるオブジェクト(ファイルハンドルや接続など)を使用するたびに、非常にイライラします。オブジェクトにの実装があるかどうかを常に確認する必要がありclose()、過去のある時点でいくつかの呼び出しを逃したと確信しています。close()実装を入れることでこれらのオブジェクトを破棄するためにVMとGCに任せる方が単純で安全ではないのはなぜObject.finalize()ですか?


3
ガベージコレクターを除き、Javaを非リアルタイムプログラミング言語にするもの
ガベージコレクタを除き、リアルタイムプログラミングに適さないJavaのその他の機能は何ですか?ネット上では、Java vs C ++がリアルタイムプログラミングに関して議論されるときはいつでも、言及されるのは常にガベージコレクターです。他に何かありますか?

8
ガベージコレクションがヒープをスイープするだけなのはなぜですか?
基本的に、これまでのところ、ガベージコレクションは現在指定されていないデータ構造を永久に消去することを学びました。ただし、これはそのような状態のヒープのみをチェックします。 データセクション(グローバル、定数など)やスタックもチェックしないのはなぜですか?ヒープについて、ガベージコレクションが必要な唯一のものは何ですか?

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