1.09k likes | 1.25k Views
Zarządzanie pamięcią: ręczne czy automatyczne. Łukasz Kosson Tomasz Wasersztrum. Podstawy. Podstawy. Stos i sterta. Podstawy. Stos i sterta. Podstawy. Stos i sterta malloc() i free(). Podstawy. Stos i sterta malloc() i free() (implementacja windows). Podstawy. Stos i sterta
E N D
Zarządzanie pamięcią: ręczne czy automatyczne Łukasz Kosson Tomasz Wasersztrum
Podstawy • Stos i sterta
Podstawy • Stos i sterta
Podstawy • Stos i sterta • malloc() i free()
Podstawy • Stos i sterta • malloc() i free() (implementacja windows)
Podstawy • Stos i sterta • malloc() i free() (implementacja windows) • tablica wolnych bloków
Podstawy • Stos i sterta • malloc() i free() (implementacja windows) • tablica wolnych bloków • bloki „zawieszone”
Podstawy • Stos i sterta • malloc() i free() (implementacja windows) • tablica wolnych bloków • bloki „zawieszone” • schemat algorytmów
Podstawy • Stos i sterta • malloc() i free() (implementacja windows) • tablica wolnych bloków • bloki „zawieszone” • schemat algorytmów • new i delete
Problemy zarządzania pamięcią • Wycieki pamięci (memory leak)
Problemy zarządzania pamięcią • Wycieki pamięci (memory leak) Pseudokod obsługi windy.
Problemy zarządzania pamięcią • Wycieki pamięci (memory leak) Pseudokod obsługi windy. When a button is pressed: Get some memory, which will be used to remember the floor number Put the floor number into the memory Are we already on the target floor? If so, we have nothing to do: finished Otherwise: Wait until the lift is idle Go to the required floor Release the memory we used to remember the floor number
Problemy zarządzania pamięcią • Wycieki pamięci (memory leak)
Problemy zarządzania pamięcią • Wycieki pamięci (memory leak) • Nieaktualne referencje (dangling pointers)
Problemy zarządzania pamięcią • Wycieki pamięci (memory leak) • Nieaktualne referencje (dangling pointers) • Fragmentacja
Garbage collector Czym jest i co robi?
Garbage collector Czym jest i co robi? • Jeden z mechanizmów zarządzania zasobami (m.in. pamięcią)
Garbage collector Czym jest i co robi? • Jeden z mechanizmów zarządzania zasobami (m.in. pamięcią) • Odpowiedzialny za zwalnianie niepotrzebnych zasobów
Garbage collector Czym jest i co robi? • Jeden z mechanizmów zarządzania zasobami (m.in. pamięcią) • Odpowiedzialny za zwalnianie niepotrzebnych zasobów • Często zmniejsza fragmentację (zewnętrzną i wewnętrzną) pamięci
Garbage collector Czym nie jest i czego nie robi?
Garbage collector Czym nie jest i czego nie robi? • Nie zwalnia z racjonalnego korzystania z pamięci
Garbage collector Czym nie jest i czego nie robi? • Nie zwalnia z racjonalnego korzystania z pamięci • Nie służy do wykrywania wycieków
Garbage collector Czym nie jest i czego nie robi? • Nie zwalnia z racjonalnego korzystania z pamięci • Nie służy do wykrywania wycieków • Nie dotyka zewnętrznych zasobów
Garbage collector Czym nie jest i czego nie robi? • Nie zwalnia z racjonalnego korzystania z pamięci • Nie służy do wykrywania wycieków • Nie dotyka zewnętrznych zasobów • Nie czyni cudów
Garbage collector Gdzie jest wykorzystywany?
Garbage collector Gdzie jest wykorzystywany? • Początki: LISP, 1960
Garbage collector Gdzie jest wykorzystywany? • Początki: LISP, 1960 • Głównie wykorzystywany do zarządzania pamięcią operacyjną ...
Garbage collector Gdzie jest wykorzystywany? • Początki: LISP, 1960 • Głównie wykorzystywany do zarządzania pamięcią operacyjną ... • ... ale także np. połączeniami, plikami
Garbage collector Gdzie jest wykorzystywany? • Początki: LISP, 1960 • Głównie wykorzystywany do zarządzania pamięcią operacyjną ... • ... ale także np. połączeniami, plikami • Środowiska, np: .NET, JVM (także ME)
Garbage collector Gdzie jest wykorzystywany? • Początki: LISP, 1960 • Głównie wykorzystywany do zarządzania pamięcią operacyjną ... • ... ale także np. połączeniami, plikami • Środowiska, np: .NET, JVM (także ME) • Języki skryptowe, np JavaScript
GC – zasada działania Jakie obiekty sprzątać?
GC – zasada działania Jakie obiekty sprzątać? • Optymalne rozwiązanie: kasować obiekty nieosiągalne semantycznie
GC – zasada działania Jakie obiekty sprzątać? • Optymalne rozwiązanie: kasować obiekty nieosiągalne semantycznie • Problem: zagadnienie równoważne problemowi stopu.
GC – zasada działania Jakie obiekty sprzątać? • Optymalne rozwiązanie: kasować obiekty nieosiągalne semantycznie • Problem: zagadnienie równoważne problemowi stopu. • Prostsze rozwiązanie: osiągalność syntaktyczna
GC – zasada działania Jakie obiekty sprzątać? • Optymalne rozwiązanie: kasować obiekty nieosiągalne semantycznie • Problem: zagadnienie równoważne problemowi stopu. • Prostsze rozwiązanie: osiągalność syntaktyczna • Praktyka: rozwiązanie pośrednie
GC – zasada działania Algorytm naiwny (mark and sweep):
GC – zasada działania Algorytm naiwny (mark and sweep): • Dla każdego obiektu trzymamy bit osiągalności
GC – zasada działania Algorytm naiwny (mark and sweep): • Dla każdego obiektu trzymamy bit osiągalności • Zaczynając od obiektów bezpośrednio osiągalnych przeglądamy strukturę obiektów
GC – zasada działania Algorytm naiwny (mark and sweep): • Dla każdego obiektu trzymamy bit osiągalności • Zaczynając od obiektów bezpośrednio osiągalnych przeglądamy strukturę obiektów • Zwalniamy obiekty do których się nie udało dojść
GC – zasada działania Wady algorytmu naiwnego:
GC – zasada działania Wady algorytmu naiwnego: • Wymaga wstrzymania procesu
GC – zasada działania Wady algorytmu naiwnego: • Wymaga wstrzymania procesu • Przeglądanie całej pamięci
GC – zasada działania Wady algorytmu naiwnego: • Wymaga wstrzymania procesu • Przeglądanie całej pamięci • Duża fragmentacja pamięci
GC – zasada działania Modyfikacje algorytmu mark-and-sweep:
GC – zasada działania Modyfikacje algorytmu mark-and-sweep: • Stop-and-copy: redukuje fragmentację, ale zwiększa dwukrotnie wymagania pamięciowe
GC – zasada działania Modyfikacje algorytmu mark-and-sweep: • Stop-and-copy: redukuje fragmentację, ale zwiększa dwukrotnie wymagania pamięciowe • Mark-and-compact: redukuje fragmentację
GC – zasada działania Obserwacja: • Im obiekt młodszy, tym szybciej staje się niedostępny