ПредишенСледващото

Списъкът по-долу показва най-важните понятия на паметта на CLR.

Виртуална памет може да бъде в три държави.

Безплатно. Позоваванията на блока от паметта на разположение, както и тя е на разположение за селекция.

Запазени. Единицата за памет е на разположение за ползване от един разработчик, и не може да се използва за друга заявка разпределение. Въпреки това, запазването на данни в блока на паметта не е възможно, докато се маркира.

Маркирана. Запаметяващият елемент определя на физическото съхранение.

След инициализация, колектор CLR боклук разпределя памет сегмент за съхранение и управление на обекти. Тази памет се нарича управляван купчината, за разлика от своя собствена операционна система купчина.

Сайтът се поддържа купчина се създава за всеки от контролиран процес. Всички теми в процеса заделят памет за обектите в една и съща купчина.

За да резервирате боклучар памет предизвиква функцията Win32 VirtualAlloc заделя памет за един сегмент в даден момент за контролирани приложения. Събирачът също така си запазва сегментите, колкото е необходимо, и се връща на освободените сегменти на операционната система (тях предварително изчистване от всички обекти), пораждащ действие Win32 VirtualFree.

Размерът на сегментите, отпускани от боклукчията, е зависимо от конкретната реализация и може да бъде променяна по всяко време, включително по време на периодични актуализации. Приложението не трябва да се правят предположения за размера на определен сегмент, да разчита на него, нито се опита да коригира размера на наличната памет за разпределяне на сегменти.

По-малките обекти, предоставени на куп, толкова по-малко ще трябва да тичам боклукчията. При пускането на обектите не използват закръглени стойности над реалните нужди, например, не избирайте 32 байта, когато е необходимо, само на 15 байта.

Събирането на боклука, когато тя е в ход, освободи паметта заета от неизползваните обекти. процес освобождаване компресира използваните предмети, че те се движат заедно, и премахва пространството, заемано от неизползваните обекти, намалявайки по този начин купчината. Това гарантира, че обектите, разпределени съвместно, ще останат на управлявания куп следващия да ги спаси на местно ниво.

Степента на интерференция (честота и продължителност) на колекции боклук зависи от броя на разпределения и запазен в управляван купчина памет.

Heap може да се разглежда като комбинация от две купчини: купчина големи обекти и един куп малки обекти.

Купчина големи обекти съдържат много големи обекти с площ от 85,000 байта. Обекти в купчина големи обекти обикновено са масиви. инстанция обект рядко е много голям.

Куп организирана в поколенията, която му позволява да се справят с дълъг живот и краткотрайни обекти. Събирането на боклука до голяма степен се ограничава до унищожаването на краткотрайни обекти, които обикновено заемат само една малка част от купчината. В един куп, има три поколения обекти.

Generation 0. Това е най-младото поколение съдържа кратък живот обекти. Пример за краткотрайно обект е временна променлива. Събирането на боклука се извършва в това поколение често.

Преразпространено обекти формират новото поколение сайтове и възли са имплицитно поколение 0, ако те не са големи обекти, в противен случай те попадат в купчина големи обекти в поколение монтаж 2.

Повечето от обектите са унищожени при събиране на боклука от поколения 0 и не оцелее до следващото поколение.

поколение поколение 1. Това включва краткотраен обекти, и служи като буфер между краткотрайни и дълготрайни обекти.

Generation 2. Това поколение включва дълголетни обекти. Един пример е дълготрайните обекти в обекта на сървър за приложения, включващи статични данни, които съществуват в продължителност процес.

Събирането на боклука се извършва за конкретни поколения при подходящите условия. монтаж поколение означава събирането на предмети в това поколение и във всички свързани с по-младите поколения. поколение 2 събиране на боклука се нарича още пълна колекция на боклука, защото тя унищожава всички обекти във всички поколения (т.е. всички обекти по успя куп).

Обектите, които не са разрушени по време на събиране на боклука, наречени оцелелите обекти и преминават към следващото поколение. Обектите, събиране на боклука оцелели от поколения 0, преминете към следващата, обектите, които са оцелели събиране на боклука за производство на 1 до 2 поколение пас, както и обектите, които са оцелели събиране на боклука за производство на 2 остават в поколение 2.

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

Тъй като обектите в поколения 0 и 1 са краткотрайни, тези поколения се наричат ​​ефимерни поколения.

Ефимерни поколение трябва да бъдат разпределени в сегмента на паметта, която се нарича ефимерна сегмент. Всеки нов сегмент се произвежда от боклукчията става новият ефимерна сегмента и съдържа предмети, които са оцелели в колекцията боклук за производство на 0. Стария ефимерна сегмент е все едно ново поколение от сегмент 2.

Ефимерни размер сегмент зависи от това дали системата е 32-битова или 64-битова версия, както и вида на събирач на боклука. Следващата таблица показва стойности.

Събирането на боклука се състои от следните етапи:

Фаза маркировка търсения на всички обекти, и се допълва техния списък.

Стъпката на движещ се, актуализиране на позоваванията на компресиращи се обекти.

Стъпка компресия, освобождаване на пространството, заемано от неизползваните обекти и компресира оцелелите обекти. На етапа на компресия на обектите, които са оцелели ходове за събиране на боклук към по-старата края на сегмента.

Тъй като производството на монтаж 2 може да обхваща множество сегменти, обектите, които са паднали в генерирането на 2, могат да се преместват в по-старите сегмент. Оцелелите обекти поколения 1 и 2 може да се премества в друг сегмент, тъй като те се премества в поколение 2.

За да се определи дали се използва обект, събирачът използва следната информация.

Корените на стека. Стек променливи, предоставени от JIT-компилатор и средство за заобикаляне на комина.

Дръжки за събиране на боклук. Описания, които показват на управляваните обекти и които могат да бъдат изолирани от потребителя код или CLR.

Статични данни. Статичните обекти в област на приложение, което може да се отнася към други обекти. Всяка област на приложение осигурява статични обекти.

Преди започване на монтажа всички управлявани отпадъчни потоци, различна от потока, който върви събирането на боклука е спряно.

Следващата фигура показва потока, което води събиране на отпадъци и причиняване спирането на други потоци.

Основи на събиране на боклука

Потокът, който работи за събиране на боклук

Свързани статии

Подкрепете проекта - споделете линка, благодаря!