I\'ve been reading a lot about low latency financial systems (especially since the famous case of corporate espionage) and the idea of low latency systems has been in my mind ev
There are many good answer in this post. I would like to add my experience also
To achieve low latency in java you have to take control of GC in java, there are many ways to do that for eg pre-allocate objects(i.e use flyweight design pattern), use primitive objects - trove is very good for that, all data structure are based on primitive, Reuse object instance for eg create system wide dictionary to reduce creating new objects, very good option when reading data from stream/socket/db
Try to use wait-free algo( which is bit difficult), lock free algo. You can find tons of example for that
Use in-memory computing. Memory is cheap, you can have tera byte of data in memory.
If you can master bit-wise algo then it gives very good performance.
Use mechnical sympathy - Refer lmax disruptor, excellent framework
http://g-wan.com/ does it all in 200 KB with ANSI C scripts.
Take a look at ZeroMQ. http://www.zeromq.org
Read the whitepapers on that site and you'll get some insight into what is required for low latency programming.
Well, its not just "traditional" real time programming, its everything. i work for a stock exchange -- speed is king. a typical problem is whats the fastest way to write to a file? the fastest way to serialize an object? etc.
Low latency is a function of many things, the two most important ones being:
So, if you are say writing an Order Matching system, the network latency would represent how soon within your network were you able to receive the order matching request. And processing latency would represent the time taken by your application to match the Order against existing, open orders.
Multicast, UDP, reliable multicast, Kernel bypass (supported by Java 7, Informatica Ultra Messaging, and many others) on Infiniband networks are some common technologies used by all companies in this field.
Additionally, there are low latency programming frameworks like disruptor (http://code.google.com/p/disruptor/) which implement design patterns for dealing with low latency applications. What could kill you is having to write to a DB or log files as part of your main workflow. You will have to come up with unique solutions that fulfill the requirements of the problem you are trying to solve.
In languages like Java, implementing your app such that it creates (almost) zero garbage becomes extremely important to latency. As Adamski says, having a knowledge of Java memory model is extremely important. Understand different JVM implementations, and their limitations. Typical Java design patterns around small object creation are the first things that you will throw out of the window - one can never fix the Java Garbage Collector enough to achieve low latency - the only thing that can be fixed is the garbage.
Good luck!
If you are interested in Java low-latency developing, you should know that it can be done without a RTSJ (Real-Time) JVM provided that you keep the Garbage Collector under control. I suggest you take a look on this article that talks about Java Development without GC overhead. We also have many other articles in our site that talk about low-latency Java components.