unset помечает zval как освобождённый. Фактически, на внутреннем уровне, это просто каст к другому типу. До PHP 7.x это свойство даже в юзерленд было выведено.
Примечание: Сейчас код отличается и сходу сказать как оно устроено не могу, если интересно поразбираться, то вот хендлер сабжевого опкода:
https://github.com/php/php-src/blob/b227a722859e83...
Всё остальное поведение уже регламентируется самим кодом: в какой момент сработает так называемый "stop the world" для подсчёта refcount и подчистки памяти. Крайний случай - это единица компиляции PHP, т.е. файл. При выходе из него всё подчищается. В идеальном же случае подчистка происходит сразу же при потере ссылки на zval даже без всяких unset.
Помимо этого терминология "подчистка" означает высвобождение пользовательской памяти, которую далее может занять другая переменная без лишних аллокаций, а не высвобождение памяти под процесс операционки. Второе происходит раз в определённые промежутки времени (тут я хз когда).
В результате, если построить график потребления ОЗУ - она всегда будет хаваться "лесенкой" (выделение пула памяти, её использование, её многократное переиспользование, и очистка в случаях, когда есть понимание того, что количество выделенной памяти избыточно) используешь ли ты unset или нет.