I totally agree, and I have complained about Java's lack of structured value types many times before because they are the main reason for Java's crazy memory usage.
However, the gap has narrowed significantly with the introduction of pointer compression in Java. It only works up to 32GB though, so this is going to be a temporary boost for Java I guess.
If you include memory usage in your performance comparison (which is very important for parallel programming), C++ is leagues ahead.