Место Java в мире HFT







Java. Java C C++? Java / HFT.



: Java , HotSpot Java, .



1.



Java HFT. , , HFT (High Frequency Trading). , . , (Peter Lawrey), Java Performance User’s Group: «HFT — , (faster than a human can see)».



HFT . , .



, . , , ? ? :



  1. , . .. FPGA, . , FPGA plain assembler, .
  2. . , , . , — ( ), — 20 ( - !). , , , .


HFT (throughput), (latency). ?



throughput (///…). .. - (/), Garbage Collection Java (, Enterprise Java!) .



latency . . , throughput (, ), latency busy-spin, .



, HFT, . Java « »? Java , C, C++?



2. «»



, 3 :



  1. CPU- , ,
  2. ,
  3. .


.



2.1. CPU-performance



-, Java : , , «», . .



:



int doSmth(int i) {
    if (i == 1) {
          goo();
    } else {
          foo();
    }
    return …;
}
      
      





( compile-time) ( PGO), : i == 1 . - , , : #1, #2, #3. - . .



#1
cmpl    $1, %edi
je      .L7
call    goo
NEXT:
...
ret
.L7:
call    foo
jmp NEXT
      
      







#2
cmpl    $1, %edi
jne      .L9
call    foo
NEXT:
...
ret
.L9:
call    goo
jmp NEXT
      
      







#3
cmpl $1, %edi
je/jne .L3
call foo/goo
jmp NEXT:
.L3:
call goo/foo
NEXT:
…
ret
      
      







Java - , , .



-, Java . . , :



void doSmth(IMyInterface impl) {
    impl.doSmth();
}
      
      





: doSmth. , /++ — . , .



Java, , :





IMyInterface, (inline) , , , .



-, Java , .



. , , x86, . , runtime-dispatching (, ifunc' LINUX), ?



Java . , AVX, , , .



2.2.



: , () . , 3 .



2.2.1



data layout. ++ — , Java. C++):



class A {
  int i;
};
class B {
  long l;
};
class C {
  A a;
  B b;
};
C c;
      
      





C/C++, - , ( data-layout , ):







.. ‘return c.a.i + c.b.l’ x86:



mov  (%rdi), %rax   ; <<  c.a.i
add  ANY_OFFSET(%rdi), %rax   ; <<  c.b.l    c.a.i
ret
      
      





, . , c.a.i, - 64 , , , , c.b.l. , .



Java? , ( ), , , :







‘c.a.i + c.b.l’ - x86:



mov    (%rdi), %rax     ;  <<    a
mov    8(%rdi), %rdx   ;  <<    b
mov  (%rax), %rax   ;  <<     i  a
add    (%rdx), %rax    ;  <<    l  b
      
      





-, -. .



2.2.2. ()



Java ( , ).



Java TLAB' (Thread local allocation buffer), , . , .



, TLAB' 04000. , , 16 04010. 04000:04010. , TLAB' ( thread-local buffer, ), !



, operator new/malloc/realloc/calloc. , , , Java. (heap) , latency.



2.2.3.



Java , (Garbage collector). , .



. , : , , .



try-finally try-with-resources.



:



Java:



{
    try (Connection c = createConnection()) {
        ...
    }
}
      
      





:



{
    Connection c = createConnection();
    try {
        ...
    } finally {
        c.close();
    }
}
      
      





, ++



{
    Connection c = createConnection();
} //        scope'
      
      





. , Java, Stop-The-World. ( , throughput, latency) — Garbage Collection.



«» . ( C/C++ delete), . new, . , , . , :



:



{
    Object obj = new Object();
    .....
    //     ,    
}
      
      





:



{
    Object obj = Storage.malloc(); //    
    ...
    Storage.free(obj); //    
}
      
      





, , , , .



2.3.



Java C C++. , ( 4 OSI ), , . , C/C++, Java.



3.



Java . , -. , Garbage Collection , . , C++ : (: “” — ). Java , stack trace ( !). Java HFT , .



4.



HFT , : , . — ( ), . , . , , - (Quantitative Researcher’), , , . , Java — . :





, : Java HFT . Java, ++, . Java C++ , Java , /++ .



All Articles