Место 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 , /++ .


Source: https://habr.com/ru/post/J331608/


All Articles