Discover your dream Career
For Recruiters

Why Java is better than C++ for high speed trading systems

The accepted wisdom has it that if you're building a high speed trading system you probably want to use C++ instead of Java: it's closer to the metal and is therefore faster (lower latency). However, some leading figures in the industry beg to disagree. 

Peter Lawrey, CEO of Chronicle Software, knows a thing or two about low latency programming. A former trading performance engineer at Barclays and developer/researcher at hedge fund Millennium Management (among other things), Lawrey founded Chronicle to work on high speed trading systems in 2013. The company counts ten tier one investment banks and multiple large hedge funds among its clients.

Historically, Chronicle offered consulting services to clients looking to build low latency trading systems. More recently, however, it's pivoted to offering consultancy and what it describes as a "generic customizable [trading] infrastructure" package for clients to iterate upon. This package is coded in Java.

"If you have an unlimited amount of time and resources, the best solution for speed will be coded in FPGA," says Lawrey, referring to the language that directly codes field-programmable gate arrays. "If you still have a lot of time and resources and you want to create multiple exchange adaptors, you'll choose C++. - But if you want to engage with 20+ exchanges, to go to market quickly, and implement continuous performance tuning, you'll choose Java."

The problem with C++ is its fallibility, says Lawrey: "If you're not a really good C++ developer, you can shoot yourself in the foot and bring an entire project down." By way of example, Lawrey points to a system he encountered in an investment bank. It was coded in C++ and should have been fast, but Lawrey says the banks' team of developers instead spent most of their time looking at crash reports and trying to second guess where the C++  was going wrong. Because of this, he says the elements of the system that ran on Java were considerably faster. "They were adding metrics in Java to see what the C++ system was going to do," he says. "It was one of the most backward things I've seen in my career."  

This doesn't mean, however, that all Java code is fast. Chronicle's system is built in what Lawrey describes as "C-like Java" and it's this that he encourages people to code low latency systems in. 

"The way that we code is more like C++ than Java," says Lawrey. "Essentially, we use a contrived form of Java that avoids all the Java constructs that make things go slow. We only use the constructs that are fast and efficient, and we avoid all the garbage." By simplifying Java and switching to very low level code, Lawrey says it can be possible to speed things up substantially. Sometimes it's simply a question of better diagnostics: "Through simply changing the configuration of the code, we've been able to reduce latency at the 99.9th percentile by a factor of 25." 

The only problem with low latency Java is that most experience Java programmers struggle with the new paradigm.  "A lot of people who program in Java are used to working in an environment where latency isn't a criteria," says Lawrey. "They may have 15-20 years' experience, but they have no understanding of low level code and of thinking only in terms of the most essential things that need to be happening." 

Chronicle coaches clients' own developers in this form of low level Java. It also employs ten specialist Java developers of its own  and will be looking to expand further as it rolls out its platform globally. Lawrey says this emphasis on C-like Java can make it difficult to recruit. "We began by hiring people from trading floors, but have more recently hired Masters and PhD students," he says.

Even so, many of the candidates who approach Chronicle aren't suited to the work. "Most Java developers are web developers and are used to modelling things they can see," says Lawrey. "But in a trading system, you care about latencies you can't see, and they're not even your typical latencies - even one millisecond can be significant. The work is very theoretical and abstract and it's difficult to have a visual intuition of what's going on." 

Photo by Niko Virtanen, license Creative Commons BY

Have a confidential story, tip, or comment you’d like to share? Contact: sbutcher@efinancialcareers.com in the first instance. Whatsapp/Signal/Telegram also available. Bear with us if you leave a comment at the bottom of this article: all our comments are moderated by human beings. Sometimes these humans might be asleep, or away from their desks, so it may take a while for your comment to appear. Eventually it will – unless it’s offensive or libelous (in which case it won’t.)

author-card-avatar
AUTHORSarah Butcher Global Editor
  • Mi
    Milo Ventimiglia
    20 July 2021

    People tend to get very religious about programming languages. It is not about c++ being better than Java, but instead, the developers itself and what needs to be done.

    Which one do you prefer? An average c++ or a excellent Java dev? How much time there's available for development cycles?

    Anyhow, I wonder what is their take on Akka(scala) or GoLang. These are language designed for low latency and high throughput.

  • Ar
    Archangel
    16 January 2021

    If you don't use C++, you'll use C# before Java - faster and easier to build sophisticated high speed systems

  • Da
    David Ongaro
    17 December 2020

    You're conflating speed with latency.

  • Pe
    Peter Lawrey
    3 December 2020

    The context is "for high speed trading systems"
    The game engine for Minecraft is in Java though I would say it is more the exception than the rule.

  • Ia
    Ian
    28 November 2020

    All so they can suck money out of small investors like a giant vampire squid. Well done.

Sign up to Morning Coffee!

Coffee mug

The essential daily roundup of news and analysis read by everyone from senior bankers and traders to new recruits.

Boost your career

Find thousands of job opportunities by signing up to eFinancialCareers today.
Recommended Articles
Recommended Jobs
Man Group plc
Java Execution Developer
Man Group plc
London, United Kingdom
Eka Finance
Start Up Hiring Quant Developer / C++/ Python
Eka Finance
London, United Kingdom
ParagonAlpha
Quantitative Developer
ParagonAlpha
New York, United States
Oxford Knight
Data Engineer- Global Hedge Fund
Oxford Knight
London, United Kingdom
Leverton Search
Junior Equity Analyst
Leverton Search
London, United Kingdom

Sign up to Morning Coffee!

Coffee mug

The essential daily roundup of news and analysis read by everyone from senior bankers and traders to new recruits.