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

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

19
IDisposableインターフェイスの適切な使用
Microsoftのドキュメントを読むと、IDisposableインターフェイスの「主な」使用はアンマネージリソースのクリーンアップであることがわかります。 私にとって、「アンマネージド」とは、データベース接続、ソケット、ウィンドウハンドルなどのことを意味します。ただし、マネージリソースDispose()を解放するためにメソッドが実装されているコードを見ました。あなたのために。 例えば: public class MyCollection : IDisposable { private List<String> _theList = new List<String>(); private Dictionary<String, Point> _theDict = new Dictionary<String, Point>(); // Die, clear it up! (free unmanaged resources) public void Dispose() { _theList.clear(); _theDict.clear(); _theList = null; _theDict = null; } 私の質問は、これにより、ガベージコレクターが使用するメモリMyCollectionが、通常よりも速く解放されるのでしょうか。 編集:これまでのところ、IDisposableを使用してデータベース接続やビットマップなどのアンマネージリソースをクリーンアップする良い例がいくつか投稿されています。しかし_theList、上記のコードに100万の文字列が含まれていて、ガベージコレクターを待つのではなく、今すぐそのメモリを解放したいとします。上記のコードはそれを達成しますか?



21
Javaのデストラクタはありますか?
Javaのデストラクタはありますか?これに関するドキュメントを見つけることができないようです。ない場合、どうすれば同じ効果を達成できますか? 私の質問をより具体的にするために、私はデータを処理するアプリケーションを書いており、仕様では、アプリケーションを元の起動した状態に戻す「リセット」ボタンがあるべきだと述べています。ただし、アプリケーションが閉じているか、リセットボタンが押されていない限り、すべてのデータは「ライブ」である必要があります。 通常はC / C ++プログラマーなので、これを実装するのは簡単だと思いました。(したがって、最後に実装する予定でした。)リセットボタンが押されたときにすべての「ライブ」オブジェクトを破棄できるように、すべての「リセット可能な」オブジェクトが同じクラスにあるようにプログラムを構成しました。 データを逆参照してガベージコレクターがデータを収集するのを待つだけでよいのかと考えていましたが、ユーザーが繰り返しデータを入力してリセットボタンを押した場合、メモリリークは発生しませんか?また、Javaは言語としてかなり成熟しているので、これが起こらないようにする方法、またはこれに適切に取り組む方法があるはずだとも考えていました。

8
Machine.Configはどこにありますか?
C#3.5アプリでサーバーGC設定を使用できるように変更を適用したいのですが、machine.configファイルを編集して変更できます。 唯一の問題は、それがどこにあるのかわからないことです。 このファイルのパスを複数の異なるマシン間で再現可能な方法で見つけるにはどうすればよいですか

11
JavaScriptでのオブジェクトの削除
私はJavaScriptのdelete演算子と少し混乱しています。次のコードを見てください。 var obj = { helloText: "Hello World!" }; var foo = obj; delete obj; このコードが実行された後、objisですがnull、fooそれでもとまったく同じようにオブジェクトを参照しますobj。このオブジェクトは、foo指し示したオブジェクトと同じだと思います。 これは私を混乱させます。なぜなら、書き込みdelete objでobjは、変数だけでなく、メモリ内を指しているオブジェクトも削除されると思っていたからですobj。 JavaScriptののガベージコレクタは、私がオブジェクトを指し、他の変数を持っていなかった場合は、それがそうすることを、保持/解放的に取り組んでいるためですでしょうメモリから削除されますか? (ちなみに、私のテストはSafari 4で行われました。)


12
なぜSystem.gc()を呼び出すのが悪い習慣なのですか?
Javaでオブジェクトを強制的に解放する方法についての質問に答えた後(男は1.5GBのHashMapをクリアしていました)、手動で呼び出すのは悪い習慣だと言われましたが、コメントは完全には説得力がありませんでした。さらに、私の回答に賛成票を投じたり、反対票を投じたりする人はいなかったようです。System.gc()System.gc() そこは悪い習慣だと言われましたが、ガベージコレクターの実行によって世界が体系的に停止することはなく、JVMがヒントとしてのみ効果的に使用できることも伝えられたので、途方に暮れる。 通常、JVMがメモリを再利用する必要がある場合、JVMはあなたよりもよく知っていることは理解しています。また、数キロバイトのデータを心配するのはばかげていることも理解しています。メガバイトのデータでさえ、数年前のデータではないことも理解しています。しかし、それでも1.5ギガバイトですか?そして、あなたは知っているメモリにぶらぶらデータの1.5ギガバイトのようにあります。それは暗闇の中でのショットのようではありません。でSystem.gc()体系的に悪い、またはそれは大丈夫になった時に、いくつかのポイントがありますか? したがって、質問は実際には二重です: なぜ電話をするのが悪いのSystem.gc()ですか?それは本当に特定の実装でのJVMへのヒントにすぎないのですか、それとも常に完全な収集サイクルですか?世界を止めることなく作業を実行できるガベージコレクターの実装は本当にありますか?私の回答へのコメントで人々が行ったさまざまな主張にいくつかの光を当ててください。 しきい値はどこですか?を呼び出すのは良い考えではありませんSystem.gc()か、それとも許容できる場合がありますか?もしそうなら、それらの時間は何ですか?

5
Javaヒープの用語:若い世代、古い世代、永続的な世代?
私は、Javaヒープの用語で、若い世代、古い世代、永続的な世代の概念が何であるか、具体的には3つの世代間の相互作用を理解しようとしています。 私の質問は: 若い世代とは何ですか? 古い世代は何ですか? 永続的な世代とは何ですか? 3つの世代はどのように相互に作用/関連していますか?




16
C ++にガベージコレクタがないのはなぜですか?
まず、ガベージコレクションのメリットがあるので、この質問はしていません。これを尋ねる私の主な理由は、Bjarne StroustrupがC ++にある時点でガベージコレクターが含まれると言ったことを知っていることです。 とはいえ、なぜ追加されていないのですか?C ++用のガベージコレクターはすでにいくつかあります。これは、「実行するより簡単に言う」タイプのものの1つにすぎませんか?それとも追加されていない(そしてC ++ 11では追加されない)理由は他にありますか? 相互リンク: C ++のガベージコレクター 明確にするために、C ++が最初に作成されたときにガベージコレクターがなかった理由を理解しています。コレクターを追加できないのはなぜですか。


6
新しい自動参照カウントメカニズムはどのように機能しますか?
誰かがARCのしくみを簡単に説明できますか?ガベージコレクションとは違うことは知っていますが、どういう仕組みになっているのか正確に疑問に思っていました。 また、ARCがパフォーマンスを妨げることなくGCを実行する場合、JavaはなぜGCを使用するのでしょうか。なぜARCも使用しないのですか?

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