всё просто, у тебя есть поток финализации, отдельный. Он идёт по очереди финализации и вызывает метод финалайз. GC не вызывает финалайз, он только добавляет объекты в очередь и всё.
если объект не собирается, он не попадёт в очередь финализатора, вот и всё. если очередь не пуста, отдельный тред будет её пахать независимо от гц.
Судя по статье объект попадает в Finalization queue сразу после создания, если в нем есть финализатор. Но вот в очередь именно на вызов финализатора и очистку памяти он попадает после сборки GC
Судя по статье объект попадает в Finalization queue сразу после создания, если в нем есть финализатор. Но вот в очередь именно на вызов финализатора и очистку памяти он попадает после сборки GC
то есть объект, который имеет финализатор добавляется в finalization queue, и при вызове SuppressFinalize удаляется оттуда. А GC перекладывает объекты из одной очереди в другую
Это всё очевидно, что вы рассказываете, а когда его использовать – непонятно. От какого размера итераций, на каких архитектурах, какое кол-во ядер и т.д.