1 / 109

Zarządzanie pamięcią: ręczne czy automatyczne

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

carlyn
Download Presentation

Zarządzanie pamięcią: ręczne czy automatyczne

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Zarządzanie pamięcią: ręczne czy automatyczne Łukasz Kosson Tomasz Wasersztrum

  2. Podstawy

  3. Podstawy • Stos i sterta

  4. Podstawy • Stos i sterta

  5. Podstawy • Stos i sterta • malloc() i free()

  6. Podstawy • Stos i sterta • malloc() i free() (implementacja windows)

  7. Podstawy • Stos i sterta • malloc() i free() (implementacja windows) • tablica wolnych bloków

  8. Podstawy • Stos i sterta • malloc() i free() (implementacja windows) • tablica wolnych bloków • bloki „zawieszone”

  9. Podstawy • Stos i sterta • malloc() i free() (implementacja windows) • tablica wolnych bloków • bloki „zawieszone” • schemat algorytmów

  10. Podstawy • Stos i sterta • malloc() i free() (implementacja windows) • tablica wolnych bloków • bloki „zawieszone” • schemat algorytmów • new i delete

  11. Problemy zarządzania pamięcią

  12. Problemy zarządzania pamięcią • Wycieki pamięci (memory leak)

  13. Problemy zarządzania pamięcią • Wycieki pamięci (memory leak) Pseudokod obsługi windy.

  14. 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

  15. Problemy zarządzania pamięcią • Wycieki pamięci (memory leak)

  16. Problemy zarządzania pamięcią • Wycieki pamięci (memory leak) • Nieaktualne referencje (dangling pointers)

  17. Problemy zarządzania pamięcią • Wycieki pamięci (memory leak) • Nieaktualne referencje (dangling pointers) • Fragmentacja

  18. Garbage collector

  19. Garbage collector Czym jest i co robi?

  20. Garbage collector Czym jest i co robi? • Jeden z mechanizmów zarządzania zasobami (m.in. pamięcią)

  21. Garbage collector Czym jest i co robi? • Jeden z mechanizmów zarządzania zasobami (m.in. pamięcią) • Odpowiedzialny za zwalnianie niepotrzebnych zasobów

  22. 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

  23. Garbage collector Czym nie jest i czego nie robi?

  24. Garbage collector Czym nie jest i czego nie robi? • Nie zwalnia z racjonalnego korzystania z pamięci

  25. 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

  26. 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

  27. 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

  28. Garbage collector Gdzie jest wykorzystywany?

  29. Garbage collector Gdzie jest wykorzystywany? • Początki: LISP, 1960

  30. Garbage collector Gdzie jest wykorzystywany? • Początki: LISP, 1960 • Głównie wykorzystywany do zarządzania pamięcią operacyjną ...

  31. 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

  32. 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)

  33. 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

  34. GC – zasada działania Jakie obiekty sprzątać?

  35. GC – zasada działania Jakie obiekty sprzątać? • Optymalne rozwiązanie: kasować obiekty nieosiągalne semantycznie

  36. GC – zasada działania Jakie obiekty sprzątać? • Optymalne rozwiązanie: kasować obiekty nieosiągalne semantycznie • Problem: zagadnienie równoważne problemowi stopu.

  37. 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

  38. 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

  39. GC – zasada działania Algorytm naiwny (mark and sweep):

  40. GC – zasada działania Algorytm naiwny (mark and sweep): • Dla każdego obiektu trzymamy bit osiągalności

  41. 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

  42. 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ść

  43. GC – zasada działania Wady algorytmu naiwnego:

  44. GC – zasada działania Wady algorytmu naiwnego: • Wymaga wstrzymania procesu

  45. GC – zasada działania Wady algorytmu naiwnego: • Wymaga wstrzymania procesu • Przeglądanie całej pamięci

  46. GC – zasada działania Wady algorytmu naiwnego: • Wymaga wstrzymania procesu • Przeglądanie całej pamięci • Duża fragmentacja pamięci

  47. GC – zasada działania Modyfikacje algorytmu mark-and-sweep:

  48. GC – zasada działania Modyfikacje algorytmu mark-and-sweep: • Stop-and-copy: redukuje fragmentację, ale zwiększa dwukrotnie wymagania pamięciowe

  49. 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ę

  50. GC – zasada działania Obserwacja: • Im obiekt młodszy, tym szybciej staje się niedostępny

More Related