The 3D arrays are a big performance thing - basically java can pack all the bytes together when they're in an array. As you split it into separate structures for pillars or whatnot, overhead is introduced. Lists of primitives are particularly bad, as the primitives each get boxed into an object...