Фіналізатор — спеціальний метод в об'єктно орієнтованих мовах програмування, які використовують збирання сміття при управлінні пам'яттю. Він викликається середовищем виконання під час видалення об'єкта.

Фіналізатор об'єкта викликається у не визначений час після того як збирач сміття визначить об'єкт як невикористовуємий, але перед вивільненням пам'яті котру займає об'єкт.

Використання фіналізаторів має багато недоліків, тому рекомендується надавати перевагу шаблону Dispose.

У мовах ООП з безпосереднім управлінням пам'яттю, аналогом фіналізатора є деструктор.

Недоліки Фіналізатор не може бути викликаний в наперед заданий момент часу, чи може зовсім не викликатись. Під час виклику фіналізатора, неможливо знати стан інших частин програми. Тому обробка винятків із фіналізатора зазвичай не можлива. Неможливо викликати фіналізатори в бажаному порядку. Під час виклику фіналізатора, інваріант класу уже може не виконуватись.

Фіналізатор може спричинити воскресіння об'єкта. Це уповільнить виконання фіналізаторів та може спричинити помилки у програмі.

Якщо дефіцитні ресурси звільняються у фіналізаторі, то це може спричинити ресурсний голод. Фіналізатори викликаються із збирача сміття, який реагує на дефіцит пам'яті, тому не пристосовані боротись із дефіцитом ресурсів інших типів.

Фіналізатор може спричинити проблеми синхронізації навіть у програмі із однією ниткою виконання, оскільки фіналізатори виконуються окремою ниттю. Навіть може спричинити взаємне блокування. Фіналізатори зазвичай не виконуються під час завершення програми, оскільки можуть завадити завершенню.

Джерела Брюс Эккель. Философия Java. Библиотека программиста. 4-е изд. - СПб: Питер, 2009. ISBN 978-5-388-00003-3 Joshua Bloch. Effective Java. Addison-Westley, 2001.