Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MemoryManagement-Basics #105

Open
Vladimir-Frolov opened this issue Jan 18, 2020 · 2 comments
Open

MemoryManagement-Basics #105

Vladimir-Frolov opened this issue Jan 18, 2020 · 2 comments

Comments

@Vladimir-Frolov
Copy link

Добрый вечер, Станислав.

https://github.com/sidristij/dotnetbook/blob/master/book/ru/Memory/01-02-MemoryManagement-Basics.md

Из главы книги по ссылке выше:

Как они хранятся? Если строка интернирована, то она хранится как обычная строка в куче. Но ее надо как-то найти, чтобы проверить, что точно такая же строка уже существует. Куча иногда может достигать нескольких сотен гигабайт и поиск будет очень дорогим решением. Поэтому интернированные строки хранятся отдельно (предполагается, что их будет не так много).

У каждого домена при этом (системного или с базовым типом BaseDomain) есть внутренние таблицы, которая нам не доступны. Среди прочих существует Large Heap Handle Table. Существует два типа внутренних массивов, основанных на bucket-ах. Это массив статиков. Имеются ввиду статические члены классов, которые хранятся в массивах. У каждого домена есть ссылка на массив статиков. И дальше ячейками являются ссылки на значения. И еще одна - pinning handles. Это таблица запиненных элементов. Для тех случаев, когда вы пинуете объект в памяти, можете сделать это двумя путями. Первый - это через API, а второй - через ключевое слово fixed в C#. Это два совершенно разных механизма.

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

@Vladimir-Frolov
Copy link
Author

Vladimir-Frolov commented Jan 18, 2020

Я так понимаю, там должна быть картинка + резкий переход к рутам. Говорили про оптимизации, а потом сразу к рутам.

Это такая оптимизация, чтобы его во втором не ловить. И второе поколение для тех, кто решил пожить подольше и если GC туда пришел, то он там останется работать надолго.

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

Опечатка "созранить "

мы хотим созранить стабильность во втором поколении и даём объектам еще один шанс быть собранными

@Vladimir-Frolov
Copy link
Author

Где-нибудь можно слайды посмотреть?

Есть механизм, который в начале изучения начинает немного пугать. Есть такой код (см. слайд) 35:19.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant