Сборка мусора во время простых распределений - PullRequest
0 голосов
/ 04 июля 2018

Итак, я отслеживал то, что я считал чрезмерным сбором мусора во время моего кода. В конце концов я свел его к следующему коду, который показал то, что я видел:

object[] ret = new object[40000000];
for (int i = 0; i < 40000000; i++)
{
    ret[i] = new object();
}

Во время выполнения этого цикла я видел десятки событий Garbage Collection Gen1. У кого-нибудь есть хорошее понимание того, почему это так? Какие объекты, на которые больше нет ссылок, он очищает при заполнении этого массива?

Вот изображение для справки: https://imgur.com/a/z3PBtou

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

Спасибо!

1 Ответ

0 голосов
/ 04 июля 2018

То, что он запустил gen1, не означает, что он собрал что-либо - это означает, что он попытался (именно потому, что вы выделили много объектов!). Он не знает, пока не попытается, удастся ли это.

Я бы не ожидал, что какой-либо GC будет происходить, пока я не потерял ссылку на созданный мной объект.

Неа; GC собирает объект, который недоступен, но он запускает всякий раз, когда считает нужным (например, на основании выделений - или из-за давления внешней памяти со стороны ОС).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...