Różnica między dyspozycją a finalizowaniem

Różnica między dyspozycją a finalizowaniem

W językach programowania obiekt może mieć tylko zmienną podczas swojego istnienia, po instancji nie można go zmodyfikować. Tak więc tej samej komórki pamięci nie można przydzielić do nowych wartości, dlatego do zarządzania nieużywanymi przestrzeniami wymagane jest pewnego rodzaju automatyczne zarządzanie pamięcią. Te niewykorzystane przestrzenie nazywane są śmieciami, a cały proces wydajnego zarządzania pamięcią nazywa się Garbage Collection.

Głównym celem zbierającego śmieci jest oddzielenie martwych obiektów od żywych obiektów i odzyskanie przestrzeni ponownego użycia. Zasadniczo cała sprawa działa na zarządzanej stercie, która jest niczym innym jak blokiem pamięci, a śmieciak okresowo sprawdza pamięć sterty, aby przydzielić pamięć na nowe obiekty. Istnieją dwie metody uwalniania niezarządzanych zasobów, takich jak pliki i połączenia bazy danych: usuwanie i finalizowanie.

Ten artykuł pomaga zrozumieć różnicę między nimi.

Co to jest metoda utylizacji?

Usuwanie to standardowy sposób, aby użytkownicy poinformowali obiekty, aby wydali swoje zasoby i nie próbować ponownie uzyskać dostępu do obiektów. Metoda dyspozycji zapewnia kontrolę jawnego oczyszczania pamięci poprzez uczynienie obiektów bezużytecznych.

Kiedy użytkownicy wywołują metodę Dispose (), obiekt ma zwolnić wszystkie swoje drogie zasoby. Nigdy nie jest nazywane przez poborcę śmieci, który pojawia się tylko wtedy, gdy zarządzana pamięć staje się rzadka. Specjalny interfejs o nazwie „Idisposable” służy do decydowania o tym, gdzie i jak zaimplementować (). Ale co się stanie, gdy metoda usuwania nie zostanie wywołana?

Co to jest metoda finalizacji?

Jeśli metoda utylizacji nie zostanie wywołana, plan awarii jest użycie metody finalize () do czyszczenia. Garbage Collector nazywa go wykonanie ostatecznego czyszczenia zasobów, zanim zwalnia pamięć. Koncepcja terminowego oczyszczania staje się tutaj niewłaściwa, ponieważ zamiast natychmiastowego odkładania pamięci, obiekt jest dodawany do kolejki finalizacji, aby zostać później zniszczonym. Finalizowanie przypomina bardziej zabezpieczenie wprowadzone w przypadku błędu programowania, a usunięcie nie oczyszcza zasoby, w którym to przypadku metoda finalize () jest wywoływana przez Garbage Collector w celu usunięcia nieosiągalnych obiektów w dowolnej sekwencji, jak.

Różnica między dyspozycją a finalizowaniem

Podstawy pozbycia i sfinalizowania

Wywołana jest metoda usuwania, aby przyspieszyć wydanie niezarządzanych zasobów, takich jak uchwyty bazy danych, uchwyty plików, semafory i inne obiekty przydzielone przez system operacyjny. Metoda dyspozycji jest wywoływana do wykonywania kodu wymaganego do oczyszczania nieużywanej pamięci i rzadkich zasobów, takich jak uchwyty GDI. Mówiąc najprościej, metoda dyspozycji zapewnia kontrolę jawnego oczyszczania pamięci. Z drugiej strony metoda finalizacji jest częścią kolekcji Garbage używanej do wykonywania ostatecznej operacji czyszczenia w obiekcie, zanim zbieranie śmieci. Mówiąc najprościej, metoda finalizacji jest wywoływana w celu uwolnienia niezarządzanych zasobów posiadanych przez obiekt, zanim zostanie zniszczony.

Wywoływanie usuwania i sfinalizowania

Metodę usuwania może być wyraźnie nazywana przez kod użytkownika i klasę, która wdraża metodę usuwania zasobów. Jednak pamięć nie może zostać zwolniona, dopóki Garbage Collector nie wykona procesu czyszczenia. Metodę można wywołać nawet jeśli nadal istnieją inne odniesienia do obiektu. Przeciwnie, metoda finalizacji może być powołana przez kolekcjonera śmieci dopiero po ustaleniu, że ostatnia instancja obiektu pamięci jest zniszczona i nie ma już odniesień do obiektu. Po wykonaniu metody finalizacji obiekt jest usuwany z pamięci sterty.

Wdrożenie dyspozycji i finalizacji

Proces usuwania obiektu z pamięci nazywa się wzorem utylizacji, który może być używany do obiektów, które uzyskują dostęp do zasobów niezarządzanych, ponieważ zbieracz śmieci nie jest w stanie odzyskać zasobów niezarządzanych. Interfejs „Idisposable” wraz z dodatkową metodą dyspozycji (boolean) jest wdrażany z prośbą o wydanie niezarządzanych zasobów. Metoda finalizacji jest wykonywana, gdy instancja obiektu jest zniszczona przed jego defaktywa. Jest to metoda niedeterministyczna, która występuje według uznania zbierającego śmieci i może nawet nie wystąpić. Nie należy go wdrażać na zarządzanych obiektach, dopóki nie jest to bardzo konieczne.

Wydajność dyspozycji i finalizowania

Znacznie szybciej stosowanie metody usuwania, a nie finalizowanie natychmiastowego usuwania obiektów. Destruktury są automatycznie konwertowane w celu finalizacji metody w czasie wykonywania. Jest automatycznie wywoływany przez poborcę śmieci, gdy obiekt wychodzi z zakresu, co zwykle zdarza się, gdy wystąpienie tego obiektu jest zniszczone. Problem z metodą finalizacji polega na tym, że nie jest to deterministyczne, co oznacza, że ​​nie jest pewne, kiedy odzyskać pamięć, do których nie jest już odwoływana przez kolekcję śmieci. Nie może jednak natychmiast uwolnić pamięci; W rzeczywistości może nigdy nie zostać wywołany i nie można go wyraźnie wymusić.

Usuń vs. Finalizuj: wykres porównawczy

Podsumowanie Dyspose VS Finalize

Główną różnicą między metodami usuwania i finalizowania jest to, że pierwsza jest metodą deterministyczną, która natychmiast usuwa obiekty, gdy nie są już używane, podczas gdy druga jest nieokreśloną metodą przydzielania zasobów niezarządzanych, co oznacza, że ​​jest to metoda zwolnienia z tyłu, aby zwolnić Instancje obiektu pamięci, gdy zejdą z zakresu przed ich defaktyczną lokalizacją. Zawsze wskazane jest użycie metody dyspozycji do finalizacji, chyba że jest to wyjątkowo konieczne.

Innymi słowy, finalizowanie jest zabezpieczeniem wprowadzonym w celu oczyszczenia niezarządzanych zasobów, gdy nie można wywołać metody utylizacji w przypadku pewnego błędu programowania. Metoda finalizacji jest wywoływana przez poborcę śmieci, gdy obiekt ma zostać wyrzucony z pamięci sterty.