問題タブ [finalize]
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.
c# - ガベージ コレクションの概念
Finalize() -この関数は、ガベージ コレクション プロセス中にのみ管理されていないリソース
をクリーンアップします。このメソッドが実際にいつ実行されるかはユーザーにはわかりません。また、ユーザーはこの関数を直接呼び出してメモリをクリーンアップすることもできません。
Dispose() -
IDisposable インターフェイスを実装することにより、ユーザーは UnManaged Resources をクリーンアップでき、リソースがいつ解放されるかを正確に知ることができます。
私の理解では、Finalize() をオーバーライドしてアンマネージド リソースをクリーンアップすることはできません。
これは、管理されていないリソースのクリーンアップに使用される「GC」プロセス専用のシステム プロセスです。
ユーザーが自分でリソースをクリーンアップする必要がある場合は、IDisposable インターフェイスを実装し、Dispose() を明示的に呼び出す必要があります。他の可能性はありません!
管理されていないリソースのクリーンアップのベスト プラクティスは、'USING' ステートメントを使用することです。
質問 1: 私の理解は正しいですか? 私が間違っている場合は、上記のステートメントで私を修正してください。
質問 2: また、知りたかったのですが、 IDisposable インターフェイスを実装し、Dispose() を呼び出すことによって、マネージド リソースをクリーンアップできますか?
.net - クリーンアップにファイナライズを使用しないことが好まれるのはなぜですか? 。ネット
(Windows API で作成されたオブジェクト、ファイル、データベース接続オブジェクト、COM オブジェクトなど) は、.NET Framework の範囲外です。リソースを明示的にクリーンアップする必要があります。これらの種類のオブジェクトに対して、.NET Framework はObject.Finalizeメソッドを提供します。このメソッドは、アンマネージ リソースのコードをオーバーライドしてクリーンアップできます...
クリーンアップにファイナライズを使用しないことが好まれるのはなぜですか?
何を使うのが適切ですか?
java - ゲッターで新しいオブジェクトを作成し、VM に収まらないようにしました
アイテム、ツールなどをリクエストするための非常にシンプルなアプリケーションを作成しました。データベースを使用して、このすべての情報を保存しました。私の求人マネージャー クラスは、データベースからの情報を使用して求人の新しいインスタンスを返す getter を使用します。この新しいオブジェクトは永遠にスタックに残りますか? どうすれば強制的に収集できますか? 新しいオブジェクトを作成せずに関数を作成するにはどうすればよいでしょうか?
java - Java finalize() をいじる
到達不能なオブジェクトを見つけた後、JVM gc がそのオブジェクトの finalize() メソッドを実行することを読みました。次に、オブジェクトがまだ到達できないかどうかを確認し、そうでない場合は削除します。そこで、オブジェクトの参照を再び利用できるようにするファイナライズを作成しました。
主な方法は次のとおりです。
「A stuff is finalized」が標準出力に表示されるため、gc が実行されますが、その後メインの printline で IndexOutOfBoundsException がスローされます。これを機能させることはできますか?
私は通常、ファイナライズをまったく使用しません。ファイナライズがオブジェクトの参照を再び利用可能にすることができるかどうかを確認するのは興味深いと思いました。これを機能させることはできますか?
java - finalize() はいつ実行されますか?
あるインタビューで、クラス A のオブジェクトが使用されていないときに JVM が gc を実行するとします。
finalize() の実行を保証しますか? もちろん
次の質問は、クラス A の obj が使用されているかどうか、現在 JVM が GC を実行している場合、finalize() を実行するかどうかでした。いいえ、JVM は A のオブジェクトを収集しないため、この finalize() は実行されません。
しかし、彼女は何もコメントしませんでしたが、がっかりしたように見えました。
私はそれを間違って解釈しますか?前もって感謝します
.net - Thread.Abort とアプリのクラッシュ
私のプログラムで奇妙なものを見つけました
このプログラムは正常に終了しますが、 「System.Data.SqlTypes.SqlInt32」のタイプを出力するメインの最初のコード行のコメントを外すと、終了時にプログラムがクラッシュし、Windows イベントで「アクセス違反」(0xc0000005)が通知されます。 )
スレッドの中止と関係があることがわかりましたが、ファイナライザーの「作業」スレッドを中止するとクラッシュが発生するのに、他のスレッドではうまく機能する理由を誰か説明できますか?
いくつかの実験の後、「System.Data.SqlTypes.SqlInt32」を出力する代わりに、System.Data.dll のロードを導入できるコードによって、このプログラムが異常終了することがわかりました。それはどのように重要ですか?
なお、私のテストによると、クラッシュは Windows 2008R2 上の .NET 4.0、または win 7 でのみ発生します。3.5 や 4.5 などの他のバージョンの .NET、または Windows XP などの OS では、正常に終了します。
前もって感謝します!
java - Java: 参照オブジェクトの API ドキュメントに必要な説明
Java の参照オブジェクトの要点と、ソフト参照オブジェクト、ウィーク参照オブジェクト、およびファントム参照オブジェクトの基本的な違いを理解しました。
ただし、APIドキュメントから次の点を完全には理解していません
WeakReference<T>の API ドキュメントから:
「参照先がfinalizable、finalized、およびreclaimedになることを妨げない弱い参照オブジェクト。」
現在、太字の用語は API ドキュメントのどこにも説明されていないため、特に多かれ少なかれ廃止された
Object.finalize()
メソッドのファイナライズの概念に関連して、それらが正確に何を意味するのか疑問に思います。Reference<T>の API ドキュメントから:
public void clear()
: "このメソッドはJava コードによってのみ呼び出されます。ガベージ コレクターが参照をクリアするときは、このメソッドを呼び出さずに直接実行します。"public boolean enqueue()
: "このメソッドはJava コードによってのみ呼び出されます。ガベージ コレクターが参照をエンキューするときは、このメソッドを呼び出さずに直接実行します。"繰り返しますが、上記の 2 つの引用符の「Java コード」が何を意味するのかわかりません: The JVM internal code which I have no access? または、読み取り専用/閲覧アクセス権を持つ JDK コードですか? それとも、エンドユーザー自身の Java コードですか?
「このメソッドを呼び出さずに直接」の部分は、JVM がこれらのメソッドを呼び出す必要がないことを示しています。一方、「Java コードのみ」の部分は、それがエンド ユーザーの Java コードではなく、JVM のものであることを示しています (エンド ユーザー コードを意味する場合、このフレーズは、すべての Java クラスのほぼすべてのメソッドの API ドキュメント!)。では、どの解釈が正しく、誰がこの関数を呼び出すことができるのでしょうか?