Я реализовал несколько ExternalStrctures (как часть «усилий FFI»), и для некоторых из них я хочу реализовать финализацию для восстановления внешней памяти.Как заставить финализацию (для тестирования) в Cuis/Squeak/Pharo?
Я пытаюсь написать несколько тестов для этого, и кажется, что независимо от того, сколько раз я заставляю сбор мусора с Smalltalk garbageCollect
, финализация (по-видимому) никогда не срабатывает.
Чтобы убедиться в этом, я поставил внешнюю точку останова (используя gdb) в функции, которую я вызываю из финализатора, но точка останова никогда не попадает. Я также проверил все ссылки на объект (после запуска многих GC), и единственной ссылкой является WeakRegistry (я попал на объект, используя allInstances).
Есть ли способ принудительно завершить финализацию (в Cuis/Pharo/Squeak)?
Вы видели объект >> #toFinalizeSend: to: with :? –
Я сделал, спасибо. Мое понимание заключается в том, что '#toFinalizeSend: to: with' заменит первоначальное поведение при завершении, но не форсирует окончание. Я мог бы использовать его, чтобы узнать, что финализация инициирована, но не для принудительной доработки. Я считаю, что было бы интересно решить мою другую проблему, если я затем перейду на завершение первоначального метода. Nice :-) – gera
Я обнаружил, что у меня возникают проблемы с процессом, выполняющим завершение. По какой-то причине он не запускается автоматически (а затем он также отключается, если я сохраняю изображение). Прямо сейчас, чтобы перезапустить его, я вручную запускаю «WeakArray restartFinalizationProcess», после чего «Smalltalk garbageCollect» заставляет финализацию. Я отвечу на вопрос, как только я пойму, как правильно установить процесс. – gera