If performance is key you will want to avoid nested objects, as that will mean chasing pointers (in the absence of value types). Megamorphic calls are also painful, but the JIT compiler may be better able to handle those (inline caches, etc). JMH and see 🙂