Earlier quoted context omitted.
I think a lack of value types also hurts Java significantly here. Though I believe they're also on the roadmap.
With generational GC, does this even matter? Generation 0 is pretty much a stack as far as performance and operation go.
Then there is the fact that you still cannot actually control the allocation. The allocation pattern ABBAABABBA has worse performance on read accesses of all As or all Bs than AAAAABBBBB but with two arena allocators you can write your code to allocate memory according to the irregular pattern but still have continguous data as the end result.