I'll add two more suggestions to what has already been said. For real-time applications
that need to process tick-by-tick data, Java's non-deterministic garbage collection
is a killer. For example, an algorithm missing a few ticks or a pricing model missing an
update to an underlying instrument or yield curve could result in significant losses.
Some shops have found ways to code around this and the result starts to look
a lot like C++ anyhow. There is some movement towards the Real-Time specification for Java
(
https://rtsj.dev.java.net/) that (among many other things) puts some rules and/or limits
around when garbage collection can occur and the resources it can use in doing so.
Another aspect to consider are the very same hordes of libraries out there for Java.
Using such libraries has its own risks (who maintains the lib.? Will they
continue to do so? Will an update to that lib. break our application? How do we know
the performance characteristics of the lib. will endure? and so on).
So it would appear that banks would rather develop much of this code form scratch.
For example, one bank I am familiar with (who uses Java) coded all of the interfaces for
their app. from scratch rather than use Swing or any of the dozens of other interface
toolkits available.
Cheers,
Prof. H.