C++ is typically preferred for HFT due to its performance, real-time capabilities, and deterministic behavior, which are critical for minimizing latency. Java can be considered in specific cases where development speed, maintenance, and cross-platform needs are more important than shaving off microseconds of latency. Some HFT systems that are not as time-sensitive may still use Java, but it's less common in ultra-low-latency environments.
one issue with java in this domain is that you end up running out of memory. You have to do everything off-heap, stick with primitives, dont use collections, ... Make it c-like
All these years and C is basically as good as it gets... unless you've got huge aspirations and need Verilog. Crazy world.