avoid clockTime in favour of clockValue.
avoid allocations when profiling is not active.
replace hashing with manual pointer lists