問題タブ [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.
java - Java と手動でファイナライズを実行する
finalize()
プログラム コードからオブジェクトを呼び出した場合、ガベージ コレクターがこのオブジェクトを処理するときに、 JVMはメソッドを再度実行しますか?
これはおおよその例です:
JVMのガベージ コレクタがオブジェクトに対してメソッドを実行しないようにfinalize()
するための明示的な呼び出しはありますか?finalize()
m
java - ファントム参照オブジェクト
ファントム リファレンスは事後分析に役立ちます。Java 仕様では、ファントム参照自体が消去されるまで、ファントム参照オブジェクトの割り当ては解除されないと規定されています。
私の質問は次のとおりです。この機能 (オブジェクトの割り当てが解除されていない) はどのような目的に役立ちますか?
(私が思いついた唯一のアイデアは、ネイティブ コードがオブジェクトの事後クリーンアップを実行できるようにすることですが、あまり説得力がありません)。
vb.net - VB.NET - IDisposable を実装するときに Finalize メソッドを追加する必要がありますか?
Visual Studio で " Implements IDisposable
" という行を入力すると、IDE によって次のものが自動的に追加されます。
- メンバー
disposedValue
変数 - a
Sub Dispose() Implements IDisposable.Dispose
- a
Sub Dispose(ByVal disposing As Boolean)
はそのDispose()
ままにして、クリーンアップ コードを に配置する必要がありますDispose(disposing)
。
ただし、Dispose Finalize パターンSub Finalize()
は、 callをオーバーライドする必要があることも示していますDispose(False)
。なぜIDEもこれを追加しないのですか? 自分で追加する必要がありますか、それとも何らかの方法で暗黙的に呼び出されますか?
編集: IDE が必要なものの 80% を自動的に追加するのに、Finalize メソッドを省略している理由がわかりませんか? この種の機能の要点は、これらのことを忘れないようにすることではないでしょうか?
EDIT2:素晴らしい回答をありがとうございました。これは完全に理にかなっています!
java - なぜ finalize() を実装するのでしょうか?
私は多くの新人 Java の質問を読んでいますがfinalize()
、finalize() がリソースをクリーンアップするための信頼できない方法であることを誰も実際に明らかにしていないことに、ある種の戸惑いを感じています。Connection をクリーンアップするために使用しているというコメントを誰かが見ましたが、これは本当に恐ろしいことです。なぜなら、Connection が閉じられていることを保証する唯一の方法は、try (catch) を最後に実装することだからです。
私は CS の教育を受けていませんでしたが、専門的に Java でプログラミングをして 10 年近くにfinalize()
なります。これはまだ、それが役に立たないという意味ではありません。
私の質問は、finalize()
言語内の別のプロセスまたは構文を介してより確実に処理できない実装のユースケースは何ですか?
この質問の意図ではないため、特定のシナリオまたは経験を提供してください.
java - Javaのデストラクタはありますか?
Javaのデストラクタはありますか? これに関するドキュメントを見つけることができないようです。そうでない場合、どうすれば同じ効果を得ることができますか?
質問をより具体的にするために、データを処理するアプリケーションを作成しています。仕様では、アプリケーションを起動したばかりの元の状態に戻す「リセット」ボタンが必要であると書かれています。ただし、アプリケーションを閉じるかリセット ボタンを押さない限り、すべてのデータは「ライブ」である必要があります。
普段は C/C++ プログラマーなので、これを実装するのは簡単だと思いました。(したがって、最後に実装する予定でした。)リセットボタンが押されたときにすべての「ライブ」オブジェクトを破棄できるように、すべての「リセット可能な」オブジェクトが同じクラスになるようにプログラムを構成しました。
データを逆参照してガベージ コレクターがデータを収集するのを待つだけだとしたら、ユーザーが繰り返しデータを入力してリセット ボタンを押すと、メモリ リークが発生しないのではないかと考えていました。また、Java は言語として非常に成熟しているため、これが起こらないようにするか、適切に対処する方法があるはずだと考えていました。
silverlight-2.0 - Silverlight 2 の最終ステップ
私は複数の Silverlight アプリケーションに取り組んできましたが、この時点まで、Visual Studio からテストしたときにのみシステムで実行されていました。それを押し出す準備ができたので、それを達成するためのステップを理解できません。
java - System.gc()またはfinalize()メソッドが呼び出されたときに内部(JVM)で何が起こりましたか?
System.gc()またはfinalize()メソッドが呼び出されたときに内部(JVM)で何が起こりましたか?
これは本当にゴミを収集するのですか、それともパフォーマンスを低下させるのですか?
c# - C#では、クラスのデストラクタとFinalizeメソッドの違いは何ですか?
クラスのデストラクタと Finalize メソッドの違いは何ですか?
私は最近、Visual Studio 2008 がデストラクタを Finalize メソッドと同義と見なしていることを発見しました。つまり、Visual Studio ではクラス内で両方のメソッドを同時に定義することはできません。
たとえば、次のコード フラグメント:
デストラクタで Finalize を呼び出すと、次のエラーが発生します。
次のメソッドまたはプロパティ間の呼び出しがあいまいです: 'TestFinalize.~TestFinalize()' と 'TestFinalize.Finalize()'
また、Finalize の呼び出しがコメント化されている場合、次のエラーが発生します。
タイプ 'ManagementConcepts.Service.TestFinalize' は、同じパラメーター タイプで 'Finalize' というメンバーを既に定義しています
clr - ファイナライズ到達可能テーブル
クラス Foo にデストラクタを実装すると、Foo のインスタンスがファイナライズ キューで厳密に追跡されます。Foo のインスタンスがガベージ コレクションされると、CLR がファイナライズ キュー内のエントリを確認し、オブジェクトをヒープからファイナライズ到達可能テーブルに移動することで、そのオブジェクトに特別な処理を与えることを理解しています。その後...そのガベージコレクションサイクルで他に何も起こらないのですか?
finalize() は次のガベージ コレクション サイクル中に常に呼び出されますか?
オブジェクトを freachable テーブルにコピーした直後に finalize が呼び出されないのはなぜですか? (これは余分な不必要な複雑さのようです)
c# - close、dispose、finalize、GC、Idisposable、....それらの明確な説明がありますか?
私は閉じる、処分する、ファイナライズする、GC、Idisposableについて完全に混乱しています。ああ、それらの明確な説明を送っていただけませんか?