Version 2 (modified by guest, 12 years ago) (diff)


Back to GarbageCollectorNotes

[This page needs lots of work]

Object Structure

Evaluation 101

Interesting Object Types

  • CONSTR - constructors
  • THUNK - thunks (courtesy of being a lazy language)
  • FUN - functions
  • IND - indirections - what is left behind after thunk evalution since we dont know who all would be referring to the thunk.
  • TSO - thread state object - see discussion at CapabilitiesAndScheduling
  • PAP - partial application - a function onject to which only some arguements have been applied.

Backward Pointers

Backwards pointers are the cause of much heartache in writing generational GCs. They are essential pointer from older generations to newer ones. If you think about it, such a thing should never really occur in a pure functional langauge since objects cannot be updated once created. While that is true in essence, backward pointers do arise in Haskell in the following cases

  • Thunk updation
  • Unsafe pointer updation
    • GHC.Prim
    • usafePerformIO : Haskell.IO.Unsafe


  • TSO

Spark Pool and par

Weak References

Stable Pointers


CAF stands for Constant Applicative Form.

Black Holes

  • Free closures environment variables early
  • Loop detection at runtime
  • Avoid re-evaluation of the same think by mutliple threads