(See also post on market data and autoboxing.)
In the post on “size of Object.java” we see every single Object.java instance needs at least 8 bytes of book keeping.
Therefore primitive array (say array of 9 ints) has much lower overhead than Collection of Integer.java
– array takes 4bytes x 9 + at least 8 byte booking keeping
– collection takes at least sizeof(Integer) x 9 + book keeping. Each Integer takes at least 4 bytes of payload + 8 bytes book keeping.
Market-data engines gets millions of primitives per second. They must use either c++ or java primitive arrays.
Market data uses lots of ints and chars. For chars, again java String is too wasteful. Most efficient would be C-string without null terminator.
The fastest market data feed is fixed-width, so no bandwidth is wasted on delimiter bits.
Floats are imprecise. Am not an experienced practitioner, but i don’t see any raw market data info represented in floating points.
Java Objects also increases garbage collection. Often indeterminate full GC hurts transaction FIX engines more than the market data FIX engines, but in HFT shops the latter needs extreme consistency. Unpredictable pause in market data FIX can shut out a HFT auto-trader for a number of milliseconds, during the most volatile moment such as a market crash.