問題タブ [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.

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

c# - 管理対象リソースをクリーンアップするための Dispose()?

この答えで私が見つけた、

コードで Dispose/Finalize パターンが使用されている場合は、Finalize メソッドでアンマネージド リソースをクリーンアップし、Dispose メソッドでマネージド リソースをクリーンアップします。

その後、ファイナライズと破棄に関するこの素晴らしい記事を見つけて、それらについて明確なアイデアを得ました。この記事には、概念を説明する次のコード (ページ 3 ) があります。

しかし、その下には、同じメモ (この質問の冒頭に含めたもの) が表示されます。

Dispose/Finalize パターン アンマネージ リソースを操作する場合は、Dispose と Finalize の両方を実装することをお勧めします。正しいシーケンスは、開発者が Dispose を呼び出すことです。開発者が Dispose メソッドを明示的に呼び出すことを怠った場合でも、オブジェクトがガベージ コレクションされると、Finalize 実装が実行され、リソースが引き続き解放されます。Francesco Balena はブログで次のように書いています。「Dispose/Finalize パターンは、型がアンマネージド リソース (アンマネージド メモリを含む) を割り当てるアンマネージド コードを呼び出し、最終的にリソースを解放するために使用する必要があるハンドルを返す場合にのみ使用する必要があります。破棄とファイナライズの両方が必要です。自身のメンバーを破棄またはファイナライズした後に、親のそれぞれのメソッドを呼び出して、親オブジェクトに連鎖します。」 簡単に言えば、コードで Dispose/Finalize パターンが使用されている場合は、Finalize メソッドでアンマネージド リソースをクリーンアップし、Dispose メソッドでマネージド リソースをクリーンアップします。

今、私は再び混乱しています。記事全体とコード サンプルでは、​​管理されていないリソースを .NET で解放する必要があることが示されていDispose()ます。しかし、そのコメントの関連性は何ですか?

編集:

この行が確認されているので:

簡単に言えば、コードで Dispose/Finalize パターンが使用されている場合、Finalize メソッドでアンマネージド リソースをクリーンアップし、Dispose メソッドでマネージド リソースをクリーンアップします。

は間違っています。この回答を編集しました。

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

c# - C# では、ファイナライズを使用してマネージド ソースを破棄できますか?

IDisposable の使用方法のパターンに従って、Microsoft はファイナライズを使用してアンマネージド ソースをリリースすることを提案しています。 http://msdn.microsoft.com/en-us/library/system.idisposable%28v=VS.80%29.aspx

しかし、管理されたソースをファイナライズで解放するコードを書くとどうなるでしょうか? つまり、管理されたソースを解放するために GC 呼び出しが完了すると、何が起こるでしょうか?

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

java - 別のパッケージの他のサブクラスで finalize() メソッドにアクセスできるのはなぜですか?

私はJavaが初めてで、初めてJavaを学ぼうとしています。私の簡単な質問は、java.lang.Object の finalize() メソッドに関するものです。他の保護されたメソッドではなく、他のクラスでこの唯一の保護されたメソッドにアクセスできるのはなぜですか。ここで私はこれを読みました。

finalize()method には特別なケースがあるのでしょうか。ここでfinalize () が保護されている理由を満足できない答えがあります。 私のコードは次のとおりです。

finalize() の場合にのみ呼び出され、別のケースでは呼び出されません。私の家庭教師に尋ねると、彼はあなたが何か間違いをしていると言っていましたが、彼は私に返事をしていません。

私は Java に慣れていると考えてください。たぶん私は何か大きな間違いをしている。

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

java - Java ファイナライズ メソッドで無限ループまたはデッドロックが発生した場合、ファイナライザ スレッドは何をしますか

Java ファイナライズ メソッド無限ループまたはデッドロックが発生した場合、ファイナライザ スレッドはどうなりますか。

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

mongodb - MongoDB Map Reduce - ファイナライズして一部の結果をスキップする

次のようにコレクションで機能する map reduce 関数があります。

私がやろうとしているのは、Finalize が特定のしきい値 (たとえば、count>10) を超えるオブジェクトのみを返すことです。現在、オブジェクトはまだ返されており、カウントは null です。

何か案は?

0 投票する
1 に答える
1029 参照

java - スローされた例外を無視する Object.finalize() メソッド

このAPIから直接:

捕捉されなかった例外が finalize メソッドによってスローされた場合、その例外は無視され、そのオブジェクトのファイナライズは終了します。

次のようにオーバーライドした後、 finalize() を明示的に呼び出そうとしました。

例外を取得しても明示的に呼び出すと、一方、暗黙的にそれを手放すと、期待どおりに例外を無視してうまくいきます。

なぜそれが起こるのですか?APIを使用する最初の方法でSystem.gc()は尊重され、明示的に呼び出された場合は尊重されないのはなぜですか?

0 投票する
1 に答える
2598 参照

android - Android finalize() および System.exit()|System.gc()

ガベージ コレクターと Object.finalize() について質問があります。finalize メソッドを実装するクラスを作成しました。アプリを実行して DDMS で強制的に GC を実行すると、参照が残っていないクラスのオブジェクトで finalize が呼び出されます。しかし、アプリ内で System.gc() を呼び出すと、 finalize は呼び出されません。アプリを終了するときに System.exit(0) を呼び出しても、ファイナライズは発生しません。finalize が呼び出されないのはなぜですか?