私はいくつかのExternalStrctures(「FFIエフォート」の一部として)を実装しました。そのうちのいくつかについては、外部メモリを再利用するためのファイナライズを実装したいと思います。Cuis/Squeak/Pharoでファイナライズ(テスト用)を強制するには?
私はそのためにいくつかのテストを書こうとしていますが、何回もガベージコレクションを強制してもSmalltalk garbageCollect
で終了しているように見えます。
ファイナライザから呼び出す関数に外部ブレークポイント(gdbを使用)を配置したが、ブレークポイントが決してヒットしないことを確認してください。 また、(多くのGCを実行した後で)オブジェクトへの参照をすべて検査しましたが、唯一の参照はWeakRegistry(allInstancesを使用してオブジェクトに取得しました)です。
ファイナライズを強制する方法はありますか(Cuis/Pharo/Squeak)?
あなたはオブジェクトを見ましたか?#toFinalizeSend:to:with :? –
私は、ありがとう。私の理解では、#toFinalizeSend:to:with'は元のファイナライズ動作を置き換えますが、強制終了は行いません。ファイナライズがトリガーされたことを知るためには使用できますが、ファイナライズを強制することはできません。ファイナライズを元の方法に戻すと、私の他の問題を解決するのは面白いかもしれないと思います。ニース:-) – gera
ファイナライゼーションを行うプロセスに問題があることがわかりました。何らかの理由で自動的に開始されません(イメージを保存すると無効になります)。私は手動で 'WeakArray restartFinalizationProcess'を実行しています。その後、' Smalltalk garbageCollect'が強制終了します。プロセスを正しくインストールする方法を理解したら、私はその質問に答えます。 – gera