Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Garbage Collection

Stefan Kanev
November 03, 2013

Garbage Collection

OpenFest 2013 talk about garbage collection

Stefan Kanev

November 03, 2013
Tweet

More Decks by Stefan Kanev

Other Decks in Programming

Transcript

  1. ?

  2. “The undecidability of liveness is a corollary to the halting

    problem” — Garbage Collection, Jones et al
  3. heap памет, където обекти се алокират в произволен ред mutator

    програмата (променя паметта) roots стека и регистрите live set паметта, достъпна от корените pointer “стрелка” от един обект към друг cells/objects парчета управлявана памет garbage недостижимата памет
  4. i = 0 while i < N: i += 1

    doSomething(i)
  5. <=>

  6. 1. Всеки обект има брояч 2. Всеки указател увеличава брояча

    3. Триенето на указател намалява 4. free() когато брояча е нула Outline
  7. ✔; Проста имплементация ✔; Детерминистичност ✘ Инкрементации/декрементации ✘ Допълнителна памет

    ✘ Паузи при големи обекти* ✘ Не освобождава цикли ✔; Повече по-късно
  8. x = [] y = [] id(x) == id(y) =>

    False id([]) == id([]) => True
  9. a = [] a = id(a) b = [] b

    = id(b) a == b
  10. 1. Започваме от root-овете 2. Рекурсивно маркираме всичко, до което

    може да стигнем 3. Трием немаркираното Outline
  11. ✔; Събира цикли ✔; По-икономичен (памет и процесор) ✘ Пауза

    за обхождане и събиране* ✘ Повече cache misses ✘ Недетерминистичен ✘ Нужда от свободна памет ✘ Линеен на спрямо heap-а
  12. ✔; Евтина алокация ✔; Дефрагментира паметта ✘ Линейно на heap-а

    ✘ Копирането е бавно ✘ Няма свободни pointer-и (мести)
  13. 1. Разделяме heap-а на две 2. Алокираме в едната половина

    3. Копираме достижимото в другата Outline
  14. ✔; Евтина алокация ✔; Дефрагментира паметта ✔; Линейно на живите

    обекти ✘ 50% място разхищение ✘ Трябва да мести обекти
  15. 1. Разделяме heap-а на млади и стари 2. Събираме основно

    младите (minor) 3. От време на време събираме старата генерация (major cycle) Outline
  16. 4

  17. 3 ConcMarkSweepGC Stop-the-world copy for young generation Mostly concurrent, non-compacting

    mark- sweep for older generation Fallback to stop-the-world compacting full collection
  18. 4 G1GC Stop-the-world copy for young generation Mostly concurrent marking

    old generation Stop-the-world, mostly incremental compacting for old generation Fallback to stop-the-world compaction
  19. Shady objects, - go into the remembered set when shaded

    - do not get promoted in the old generation
  20. DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS

    DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS DEVELOPERS