дело не только в куче. нативная память тоже очищается но не освобождается. на оф форуме об этом говорят уже 10 лет. юнитеки аргументируют тем, что если в одном кадре ты память почистил, то в следующем она снова может потребоваться. и требовать/отдавать ее туда сюда дорого. теоретически юнити может освобождать неиспользуемую память если прошло много времени. этому преданию уже много лет.
и перезагрузка пустой сцены не поможет, память только еще чуть подрастет. это примерно то же самое что UnloadUnusedAssets.
единственный способ с этим бороться - не уничтожать объекты/компоненты. отключать видимость/активность, задвигать за камеру. если нужен подобный объект то перенастраивать компоненты, если другой, а более подходящих нет, то удалять ненужные компоненты.
вероятно поведение не зависит от движка или используемого языка. единственное, что может где-то быть, это команда принудительной отдачи системе неиспользуемой памяти.