In a strongly typed language like Java all variables and fields have a fixed type known at compile-time. What run-time data structures are needed in Java to implement the mark phase of a mark-sweep garbage collector in which all accessible ("live") heap objects are marked?