問題タブ [garbage-collection]

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 投票する
2 に答える
312 参照

language-agnostic - ガベージ コレクションとランタイム タイプの情報

fixnum の質問は、私が長い間疑問に思っていた別の質問を思い起こさせました。

ガベージ コレクションに関するオンライン資料の多くは、実行時の型情報を実装する方法について説明していません。したがって、私はあらゆる種類のガベージ コレクターについて多くのことを知っていますが、それらを実装する方法についてはあまり知りません。

fixnum ソリューションは実際には非常に優れており、どの値がポインターであり、どの値がポインターでないかが非常に明確です。型情報を格納するために一般的に使用される他のソリューションは何ですか?

また、 fixnum についても疑問に思います。それは、すべての配列インデックスで fixnums に制限されているということではありませんか? または、完全な 64 ビット整数を取得するための回避策はありますか?

0 投票する
15 に答える
699 参照

.net - ガベージコレクターのポイントは何ですか

例外がスローされた場合にすべてのリソースが適切に破棄されるように、上記のコードに try/catch (または using) を含めることをお勧めします。

しかし、手作業で物を処分することを心配しなければならない場合、GC のポイントは何でしょう?! コーダーのためにこれを処理するためにGCはありませんか?

0 投票する
2 に答える
15990 参照

c# - C# WPF でのメモリ リーク

C# でのメモリ リークの原因を突き止めるためのアドバイスを参考にしてください。メモリ リークとは何か、C# で発生する理由はわかりましたが、過去にどのようなツールや戦略を使用して解決したのでしょうか?

.NET メモリ プロファイラを使用していますが、巨大なメイン​​ オブジェクトの 1 つが、管理するウィンドウを閉じた後もメモリ内に残っていることがわかりましたが、そのオブジェクトへのすべてのリンクを切断する方法がわかりません。

十分に明確でない場合は、質問付きの回答を投稿してください。それに応じて質問を編集します。ありがとう!

0 投票する
16 に答える
14675 参照

c++ - C++ のガベージ コレクション -- なぜですか?

C++ にはガベージ コレクションがないという不満をよく耳にします。また、C++ 標準委員会がそれを言語に追加することを検討していると聞いています。残念ながら、そのポイントがわかりません...スマートポインターでRAIIを使用すると、その必要がなくなりますよね?

ガベージ コレクションに関する私の唯一の経験は、数台の安価な 80 年代の家庭用コンピューターで、システムが頻繁に数秒間フリーズすることを意味していました。それ以来、それは改善されたと確信していますが、ご想像のとおり、それは私に高い意見を残しませんでした.

経験豊富な C++ 開発者にとって、ガベージ コレクションにはどのような利点がありますか?

0 投票する
16 に答える
157555 参照

c# - C# でガベージ コレクションを強制するためのベスト プラクティス

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

0 投票する
9 に答える
1759 参照

language-agnostic - ガベージ コレクションは明示的なメモリ管理と共存できますか?

たとえば、C# 4 に「delete」キーワードを含めるとします。参照ベースのシステムにより、ワイルド ポインターがまったくないことを保証できますが、ガベージ コレクターに依存することはできますか? ?

それが起こっている可能性を確認できる唯一の方法は、メモリ位置への参照の代わりに、参照が実際のオブジェクトへのポインタのテーブルへのインデックスになる場合です。ただし、それが壊れる条件がいくつかあると確信しており、タイプの安全性を破ったり、ポインターがぶら下がったりする可能性があります。

編集: .net だけについて話しているわけではありません。例としてC#を使用していました。

0 投票する
2 に答える
1173 参照

objective-c - Objective-C ガベージ コレクションの自己所有オブジェクト

メモリ管理されたコードで、オブジェクトが特定の所有者に属していない状況、つまりオブジェクト自体が解放された状況を処理するための推奨される方法を考えています。そのような例の 1 つは、単一のウィンドウの入力と出力を構成、表示、および管理する NSWindowController のサブクラスです。コントローラー オブジェクトはウィンドウを表示し、後である時点 (通常は、それが管理するウィンドウまたはシートが閉じられたとき) にそれ自体を解放します。AppKit にもいくつかの例が用意されています。NSAnimation は startAnimation に保持され、アニメーションが完了すると解放されます。もう 1 つの例は NSWindow で、閉じたときにそれ自体を解放するように構成できます。

これらの「自己所有」オブジェクトを自分で実装すると、少なくとも 3 つの異なる GC セーフ パターンが見られますが、それらすべてにいくつかの欠点があります。

a)。CFRetain/CFRelease を使用します。

自己所有のオブジェクトは、その操作を開始する前に自己に対して CFRetain を呼び出します (たとえば、ウィンドウ コントローラーの例では、ウィンドウが表示される前)。次に、完了したら自分自身で CFRelease() を呼び出します (たとえば、ウィンドウが閉じられた後のウィンドウ コントローラーの例)。

長所: オブジェクトのユーザーは、メモリ管理について心配する必要がありません。
短所: 純粋な ObjC コードで GC を使用していますが、メモリ管理関数を使用する必要があるため、少し見苦しいです。CFRelease() が呼び出されない場合、リークを特定するのが難しい場合があります。

b)。静的データ構造による自己所有のイディオムの回避。

オブジェクトは、操作を開始する前にデータ構造 (静的可変配列など) に自身を追加し、操作が完了するとそこから削除します。

長所: オブジェクトのユーザーは、メモリ管理について心配する必要がありません。メモリ管理関数の呼び出しはありません。オブジェクトには明示的な所有者がいます。潜在的な漏れは簡単に特定できます。
短所: オブジェクトが異なるスレッドから作成される可能性がある場合は、ロックが必要です。余分なデータ構造。

c)。オブジェクトのユーザーにオブジェクトへの参照を保存することを要求することにより、自己所有のイディオムを回避します (ivar など)。

長所: メモリ管理関数を呼び出さない。オブジェクトには明示的な所有者がいます。
短所: オブジェクトのユーザーは、オブジェクトが不要になった場合でも参照を保持する必要があります。エクストラ・イヴァル。

これらのケースを処理するには、どのパターンを使用しますか?

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

c# - BackgroundWorker インスタンスがガベージ コレクションされるのはいつですか

このコードブロックを検討してください

それはすべてうまくいきますが、オブジェクト(ワーカー、ビュー、更新)がガベージコレクションされない理由を理解したいです

0 投票する
8 に答える
15751 参照

.net - .NET でオブジェクトを破棄する必要があるのはいつですか?

一般的なコードの場合、本当にオブジェクトを破棄する必要がありますか? ほとんどの場合、それを無視できますか、それとも、100% 不要になったと確信している場合は、常にオブジェクトを破棄することをお勧めしますか?

0 投票する
4 に答える
4437 参照

.net - IDisposableを単体テストするには?

の周りのライブラリ コードに取り組んでいますIDisposable。管理パス (経由using) は簡単にテストできます。私はファイナライザーについて疑問に思っていますSystem.GC.Collect().ファイナライザーを強制的に実行するのに十分な呼び出しはありますか?