Odśmiecanie
description
Transcript of Odśmiecanie
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
Struktura pamięci
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
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!!!