This can also help performance -- you get much better cache coherency by putting the components in arrays (an array of bounding boxes, an array of geometry...), and then you can do all sorts of cool data transformation tricks on these arrays (build a tree across it, or a sorted list of pointers, convert to a different coordinate space...) without all the OO overhead (which you still get when you need/want it...) But underneath all that, you still have a tightly packed array of data.