Как сборщик мусора будет вести себя по типу значения и ссылочному типу

Как сборщик мусора будет вести себя по типу значения и ссылочному типу, когда он освободит тип значения памяти и тип ссылки. я немного запутался в этом, может кто-нибудь объяснить об этом, в то же время сборщик мусора удалит свободную память типа значения или тип ссылки, которые удаляют сначала

Вы думаете о проблеме не так. Перестаньте думать о «типах значений» и «ссылочных типах». Вместо этого начните думать о переменных и о том, являются ли эти переменные короткими или долговечными .

Назначение кучи мусора – вернуть хранилище, связанное с долгоживущими переменными. objectiveю стека является восстановление хранилища, связанного с недолговечными переменными.

Люди будут пытаться сказать вам, что «типы значений идут в стек» и «ссылки идут на кучу» и т. Д., И это путаница ерунда. Переменные идут в стек или кучу (или регистры – все забывают о регистрах), а переменные могут иметь тип значения или ссылочный тип.

Вы продолжаете спрашивать «что сборщик мусора удалит первым?» На этот вопрос нельзя ответить. Мусор, собранный в кучу, не дает никаких гарантий относительно порядка, в котором память восстанавливается. Недолговечное хранилище – стек – будет восстановлено, поскольку кадры активации будут удалены со стека. Однако язык C # позволяет сборщику мусора очищать хранилище, на которое ссылается недолговечное хранилище, прежде чем кадр выскочит из стека, если среда выполнения может определить, что ссылка не будет снова доступна. В основном, когда хранилище исправлено, это деталь реализации среды выполнения, подлежащая изменению в любой момент .

Сборщик мусора касается только ссылочных типов. Он ничего не делает с типами значений.

Типы значений могут находиться в стеке, и в этом случае их память восстанавливается при выходе метода и указателе стека. Типы значений могут также находиться в куче в качестве полей ссылочных типов . В этом случае память восстанавливается, когда объект ссылочного типа собирается GC.