230 likes | 373 Views
Odśmiecanie. Grzegorz Timoszuk gt219709@students.mimuw.edu.pl. Wstęp do GC. Pierwsze prace już w latach 60 i 70 Co to jest GC tak naprawdę? Typowe podejście do GC Czemu warto wiedzieć więcej o GC. Gdzie używa się GC a gdzie nie. Używa się: Optymalizacja czasu alokacji i zwalniania
E N D
Odśmiecanie Grzegorz Timoszuk gt219709@students.mimuw.edu.pl
Wstęp do GC • Pierwsze prace już w latach 60 i 70 • Co to jest GC tak naprawdę? • Typowe podejście do GC • Czemu warto wiedzieć więcej o GC
Gdzie używa się GC a gdzie nie • Używa się: • Optymalizacja czasu alokacji i zwalniania • Wygoda programistów • Nie używa się: • Pełna kontrola na pamięcią (np. jądro Linuxa) • Systemy czasu rzeczywistego • Systemy wbudowane
Języki a odśmiecarki • C/C++ - Boehm GC • RUBY • Języki funkcyjne - Lisp • Języki obiektowe • Smalltalk • JAVA
Przegląd algorytmów GC • Zaznacz i zamieć • 3 kolorowy Zaznacz i zamieć • Zaznacz i nie zamiataj • Zatrzymaj i kopiuj • Zliczanie referencji • Odśmiecanie pokoleniowe
Zaznacz i zamieć • 2 zbiory • Przeglądanie całej pamięci i to 2 razy • Zatrzymuje system • Słabo wydajne
3-kolorowa wersja • 3 zbiory białe/szare/czarne • Biali kandydaci do odśmiecenia • Czarne puste/bez referacji do białych (zostają) • Szare – do przetworzenia • Coś typu przechodzenie wszerz z szarych
Zaznacz i nie zamiataj • Raz zaczerniony zostaje czarny • Biały wolny i może być zwolniony • W pewnym momencie wybielanie wszystkiego i wyszukiwanie używanch • I tak w kółko
Zliczanie referencji • Struktura referencji – np. graf • Typowy problem – cykle • Inny problem - uaktualnienia • Zasadniczo małe wydajne • Np. Python
Zatrzymaj i kopiuj • 2 przestrzenie „z” i „do” • Zużywa 2 razy więcej pamięci niż potrzeba • Działanie podobne do przechodzenia w głąb • Proste w implementacji • Algorytm Cheneya
Przenosić czy nie • Problem przenoszenia danych w pamięci podczas działania GC, jak przenosić to: • Od razu wiadomo ile jest wolnego • Bardzo szybko i wygodnie się tworzy obiekty • Można optymalizować ustawienie obiektów – np. obiekty często używane po sobie
Pokoleniowy GC • Śmiertelność noworodków • Podział na generacje • Działanie w obrębie generacji i całości (mały i duży cykl) • Podejście heurystyczne
Jak to jest w życiu • Nie ma jednego idealnego GC • Przykład JAVA • Ma kilka wbudowanych GC do różnych zastosowań • Od JSE 5.0 JVM sam dobiera najlepszy GC do maszyny • Możliwości skalowania
GC w Javie • Zakłada się, że większość danych zostanie zwolnione szybko po alokacji • Nawet mały czas działania GC na 1 procesorze potrafi znacznie wydłużać się w przypadku maszyn wieloprocesorowych
Miary wydajności • Mamy dwie najważniejsze miary wydajności GC • CZAS PROCESORA STRACONY W GC • CZAS PAUZ SYSTEMU
Typy GC w Javie • Standardowy – większość aplikacji, najczęściej ustawiany jako domyślny • Równoległy – systemy wieloprocesorowe, minimalizuje czas spędzony w GC i pauzy • Współbieżny – raczej systemy wieloprocesorowe – krótkie pauzy ponad wszystko
Równoległy GC w Javie • Typowy dla maszyn wieloprocesorowych • Od Javy 5.0 update 6 obie fazy mogą być zrównoleglane • Priorytety minimalizacji • Maxymalny czas pauz • Wydajność (% czasu procesora) • Footprint
Współbieżny GC • Jesteśmy w stanie tracić wydajność na rzecz krótkich pauz • Da się stosować już od 2 procesorów – tryb przyrostowy • Na GC ok. liczba procesorów/4 w czasie działania • Działa na 2 pauzy, druga pauza dłuższa
Współbieżny GC • Tryb przyrostowy • Zatrzymaj wątki, znajdź osiągalne z korzenia • Stwórz graf osiągalnych • Jeszcze raz przejdź graf, poszukiwanie zmian z ostatniej chwili • Zatrzymaj i sprawdź wszystkie zmiany i uaktualnij dane • Współbieżnie wymieć nieużywane • Przygotuj się do następnej fazy
Źródła • Prezentacja zrobiona w oparciu o szeroko pojęty Internet: • Wikipedię (http://wikipedia.org) • Dokumentację techniczną do Javy, jest to również źródło grafik prezentacji (http://java.sun.com) • Wesołe obrazki z pakietu MS Office
PYTANIA?? DYSKUSJA!!!