4 ms·
Ive worked a couple java based hft platforms at major firms. You write code that never gcs after startup. That means not using certain language constructs and r
by jnordwick 7y ago
Ive worked a couple java based hft platforms at major firms. You write code that never gcs after startup. That means not using certain language constructs and rewriting almost every library along with using off heap memory.
I have personally worked on systems that would run an entire week between deployments and never gced.
- giu 7y agoCould you maybe elaborate more on how to achieve this with Java, i.e., run an entire week and never get GCed? I would imagine that using immutable types is one of the tricks used in such a scenario.
- Pepe1vo 7y agoYou would (among other techniques) use something like Stormpot to maintain Object pools to release and acquire instances from. Object pools typically can't match the GC on latency and throughput, however they do provide a lot more predictable and stable performance.
- mlrtime 7y agoYou basically write Java as C++, you don't use any builtins, write everything yourself from pure java.
- dirtydroog 7y agoAnd I'd imagine sun.misc.Unsafe is used quite often too.
- spugody 7y agoI know you said "almost" but you don't have to re-write huge amounts to achieve zero gc and very low latency. There are open source tools, eg. agrona, aeron, that get you a lot of the way there.
- zerr 7y agoWhy would you do that? Why not use C++? Especially, as you say, when memory management is ignored...
- throwaway720348 7y agoYou can use a language like OCaml without allocating and still capture huge benefits over C++, like a decent type system, ADTs, and better abstractions than templates (modules in OCaml's case).
- zerr 7y agoWhat about multicore? :) Nowadays Rust seems to cover all those features with zero-cost abstractions.
- p_l 7y agoYou still need to write non-consing code to avoid memory allocation/deallocation latency, just as if you were working in Java, Lisp or OCaml. (In fact, GCs can often give you better latency than malloc/free unless you go into custom allocators with object pools... which is part of writing non-consing code in GCed languages)
- throwaway720348 7y agoAh you're right, I forgot about OCaml's ass-tier multicore support. Rust is definitely better there.