Again I don't really see how this works in Java's favour compared to C++. Algorithms can be easier to express in Java perhaps. I think that if you understand the algorithm you should be able to apply it in any language you know.
Agreed, but distributed database algorithms / query optimization algorithms are extremely hard. Coding them in Java is hard enough, but coding them in C++ is even much harder, because not only you have to get the algorithm right, but also all those tiny subtle technical details like memory management, thread control, all those copy-constructors, exception safety etc., and it is all quite verbose and easy to screw-up.
Personally I feel like Java is still too low-level for most of this stuff, particularly because this kind of code usually doesn't need to be 100% efficient, but it does need to be 100% correct and reliable. Getting only 50% of the maximum possible speed wouldn't matter, because it would be shadowed by the I/O cost. But getting 0.001% of use-cases wrong or a tiny 10B/request memory leak would be a disaster.
You can have good system architecture done in just about any language
Right, but C++ complicates it. E.g. not really having to think about *ownership* of objects is a great simplification when designing internal APIs, especially if you need lousy coupling of components.
If he wants to argue Java over C++ that is perfectly fine, I simply think this isn't the place to do it.
See the thread-title. What is a better place to discuss Java vs C++ than a Java vs C++ thread? ;)