Tuesday 11 July 2017

Ultra Low Latency Trading Systeme


Cambridge, UK 23. Juni 2014 Argon Design ein Design-Service-Unternehmen spezialisiert auf komplexe digitale Systeme gab heute bekannt, dass es ein ultra-low Latency Finanz-Trading-System für ein eigenes Handelshaus entwickelt Latenz Arbitrage auf einem der führenden Börsen in Amerika entwickelt hat Vollständige Handelsplattform, die Funktionen von der Echtzeit-Marktdatenaufnahme über die Algorithmenunterstützung für die FIX-basierte Auftragsvergabe beinhaltet, wurde im Mai 2014 gelaufen. Es baut auf den bahnbrechenden Ergebnissen auf, die Argon im September 2013 für den Hochleistungshandel mit einem Hybrid-Design von FPGA - und x86-Technologien angekündigt hat Dies kombiniert schnelle Pfade, die in FPGA implementiert werden, um Nanosekunden-Level-Tick-to-Trade-Reaktionen auf wichtige Ereignisse zusammen mit Opportunity-Setup, Parameter-Bestimmung und System-Management auf einem leistungsstarken x86 Server. Die beste Brut Hardware umfasst einen Supermicro Hyper-Speed-Server Mit Dual Intel Xeon E5 Prozessoren montiert und geliefert von Bios IT, sowie ein Arista 7124FX Switch mit integriertem Stratix V FPGA. Die FPGA-Logik nutzt eine Reihe von Optimierungstechniken, die von Argon entwickelt wurden, um den Geschwindigkeitsvorteil zu maximieren. Dazu gehören Inline-Parsing, Pre-Emption, Inferenz - und Gateway-Arbitrierung Um die verschiedenen Inferenztechniken zu versorgen, beinhaltet das FPGA komplexe Logik zu bauen und zu pflegen Auftrag Bücher und Statistiken FAST FIX Parsing wird in höchstens 64 ns durchgeführt, und Auftrag Buch Gebäude ist in 32ns abgeschlossen Für die niedrigste Latenz Netzwerk-Schnittstellen, verwendet das System Tamba Networks Terminal Latenz 1G MAC. Der geschäftsführende Partner des Handels Haus kommentiert Als Austausch wird mehr deterministisch, ist es wichtig, eine Plattform, die einen Geschwindigkeitsvorteil sowie intelligente Handelsstrategien gibt Das Argon-System hat uns diese Kante gegeben. Steve Barlow, CTO von Argon Design kommentiert High Performance Trading weiterhin aktiv zu sein Über weltweite Märkte Da es wohl mehr Nische wird, wird der Zugang zu den Hochleistungs-Technologien und den Fähigkeiten, um zu gewinnen, zu gewinnen Ct und montieren die notwendigen teile Bei Argon glauben wir an die Details der spezialisierten Ingenieurwissenschaften jeder Kunde ist anders und damit entwickeln wir maßgeschneiderte Systeme, die den entscheidenden Vorsprung geben. About Argon Design. Argon Design wurde 2009 gegründet und arbeitet im Herzen der Welt Cambridge Technology Cluster mit Zugang zu den Märkten, die Intellekt führen In der Finanzbranche unterstützt Argon Design die Inhouse-Teams durch die Bereitstellung von Fachkompetenzen oder zusätzlichen Ressourcen für Projekte sowie komplette maßgeschneiderte Designs in Bereichen wie. Heterogene Hardware und Software-System Architektur. Appliance Design und Produktion. FPGA-basierte Entwicklung Programmierung. Many-Core-Prozessor Hardware-und Software-Design mit Tilera, Intel und andere Arbeit processing. GPU Entwicklungsprogrammierung und OpenCL. BarsMonster konnte ich aber für Dinge wie Networking Stacks, die vollständig plattformabhängig sind, erfordern einige Körper des Wissens, bevor sie in der Lage, Plattformen zu wechseln Plus Dinge wie Gabel, die in der POSIX Welt sind, aber sind nicht möglich in einer Windows-Umgebung Ich denke es Eine vernünftige Antwort Billy ONeal Aug 29 10 bei 0 55.Linux UNIX sind viel mehr nutzbar für gleichzeitige Remote-Nutzer, so dass es einfacher, um die Systeme zu scriptieren, verwenden Sie Standard-Tools wie grep sed awk perl ruby ​​weniger auf logs ssh scp all das Zeug s Nur da. Es gibt auch technische Probleme, zum Beispiel um die verstrichene Zeit auf Windows zu messen, können Sie zwischen einer Reihe von Funktionen auf der Grundlage der Windows-Uhr-Tick wählen, und die Hardware-basierte QueryPerformanceCounter Erstere ist inkrementiert jede 10 bis 16 Millisekunden beachten einige Dokumentation Impliziert mehr Präzision - zB die Werte von GetSystemTimeAsFileTime Maßnahme auf 100ns, aber sie berichten die gleiche 100ns Rand der Uhr tick, bis es wieder tickt Letzteres - QueryPerformanceCounter - hat Show-Stopp-Probleme, bei denen verschiedene Kerne cpus können Taktgeber-seit-Startup, die sich um einige Sekunden unterscheiden, weil sie zu verschiedenen Zeiten während der System-Boot-MSDN-Dokumente als eine mögliche BIOS-Bug erwärmt werden, aber es ist üblich Also, Der auf einer Plattform, die sich richtig instrumentieren lässt, entwickelt werden kann, gibt es Lösungen, aber Sie haben keine Software gefunden, die bequem in Boost oder ACE sitzt. Viele Linux UNIX-Varianten haben viele leicht tweakable Parameter, um zu handeln Latenz für ein einziges Ereignis gegen durchschnittliche Latenz unter Last, Zeit Slice Größen, Scheduling-Richtlinien etc. Auf Open-Source-Betriebssysteme gibt es auch die Sicherheit, die mit in der Lage, auf den Code zu verweisen, wenn Sie denken, etwas sollte schneller als es ist, Und das Wissen, dass eine potenziell riesige Gemeinschaft von Menschen gewesen und sind so kritisch - mit Windows ist es offensichtlich vor allem die Menschen, die wieder zugewiesen, um es zu sehen N die FUD-Reputationsseite - etwas immateriell, aber ein wichtiger Teil der Gründe für die OS-Auswahl - ich denke, die meisten Programmierer in der Branche würden nur Linux UNIX mehr vertrauen, um eine zuverlässige Terminierung und ein verhaltenes Verhalten zu gewährleisten. Weiterhin hat Linux UNIX einen Ruf für das Zusammenstoßen Windows ist ziemlich zuverlässig in diesen Tagen, und Linux hat eine viel mehr flüchtige Code-Basis als Solaris oder FreeBSD. answered Aug 29 10 bei 0 42.Windows Client-Betriebssysteme erlauben nur eine Person, RDP zu einem Zeitpunkt verwenden jedoch Windows Terminal Server wurde um Für immer war es in der Tat die ursprüngliche Verwendung von RDP und es erlaubt so viele Verbindungen wie Sie haben Client Access Lizenzen Windows Server OSs kommen mit der Fähigkeit, mehr als einen Remote-Benutzer standardmäßig haben Wenn Sie den Kommentar über die Terminierung dann ich könnte Quelle Würde 1 hier - dieser Teil der Antwort scheint FUD an diesem Punkt zu mir der Rest der Antwort ist gut YMMV Billy ONeal Aug 29 10 bei 0 50.Es gibt keine UNIX Linux Scheduling Es ist einer der Bereiche, in denen Implementierungen unterscheiden Und Linux hat in der Tat hat mehr als ein Scheduler Wahl google Completely Fair Scheduler Linux für Hintergrund, so können Sie t sogar sagen, Linux Scheduling ist zuverlässig MSalters 30. August 10 um 11 37.I Sechs die Meinungen von historischen und Zugang Zu kernel manipulation. Abgesehen von diesen Gründen glaube ich auch, dass genau wie, wie sie abschalten Müll-Sammlung und der ähnliche Mechanismus in Java bei der Verwendung dieser Technologien in einigen geringen Latenz Sie vermeiden Windows wegen der APIs auf hohem Niveau, die interagieren mit Low Level Os und dann der Kernel. So der Core ist natürlich der Kernel, der mit dem niedrigen Level os interagiert werden kann. Die High-Level-APIs werden bereitgestellt, nur um den gemeinsamen Benutzern das Leben zu erleichtern. Aber im Falle einer geringen Latenz geht das heraus Sei eine fettige Schicht und Fraktion Sekundenverlust um jede Operation So eine lukrative Option für die Gewinnung von wenigen Bruch Sekunden pro Anruf. Abgesehen von dieser anderen Sache zu prüfen ist Integration Die meisten der se Rivers, Rechenzentren, Börsen verwenden UNIX nicht Windows, so dass die Verwendung der Kunden der gleichen Familie macht die Integration und Kommunikation einfacher. Sie haben Sicherheitsprobleme viele Menschen da draußen vielleicht nicht mit diesem Punkt zustimmen, obwohl Hacking UNIX ist nicht einfach im Vergleich zu Hacking WINDOWS I Don t zustimmen Lizenzierung muss das Problem für Banken sein, weil sie Geld auf jedem einzelnen Stück Hardware und Software und die Menschen, die sie anpassen, so dass Lizenzen kaufen wird nicht so größer das Problem, wenn sie, was sie gewinnen durch den Kauf. answered Dec 21 12 am 20 05. Ihre Antwort.2017 Stack Exchange, Inc. Ultra Low Latency Trading Systems. Lazy Initialisierung für den StringBuilder Einige allocs bis Puffer schlägt maximal benötigte Größe. Best Option, wo Speicher begrenzt ist und es kann viele Instanzen. Nicht Thread sicher Aber das ist FEIN, da alle Code ein einziges Thread angenommen hat, wenn nicht anders angegeben. Im Ultra-Low-Latency-Threading-Modell ist explizit und alle Konkurrenz minimiert und verstanden. D Presized Member var Iable. private final StringBuilder info neue StringBuilder 1024.private Nachricht read. Message m decode. append, isDup. Ok so die Wächter sollten in allen Beispielen, aber in typischen Java-Code seine ignoriert und die Zuweisungen und Mempence bezahlt eine faulen Steuer. Ultra Low Latency-Ansatz für die StringBuilder Single-Puffer-Zuweisung vorgestellt, um max Anforderung. Nicht Thread sicher, aber das ist FINE wie alle Code angenommen einzigen Thread, wenn nicht anders angegeben. In ultra Low Latency Threading-Modell ist explizit und alle Konkurrenz minimiert und verstanden. FYI SubMicroTrading nicht verwenden StringBuilder aber ReusableString, um den Overhead von toString zu vermeiden und verwendet Byte statt char. There ist keine echte Mystik in JNI Anrufe, das Konzept, dass JNI ist langsam ist ein falsches Wenn Sie Ihre JNI-Schnittstellen einfach dann, wenn der Code ist kompiliert seine nur eine andere Funktion rufen allbeit mit extra zwei parametern an. Ich empfehle, JNI Anrufe innerhalb eines Umschlags zu verpacken, der das Umschalten zwischen Linux, Windows und vielleicht nein erlauben kann Benutzerdefinierte JNI Ich entwickelte SubMicroTrading auf einem kleinen Dell Adamo Laptop und konnte den Austausch sim, Marktdaten sim, Trading-Anwendung alle auf Dual-Core mit 4GB RAM versuchen, das in C. In SubMicroTrading alle benutzerdefinierten JNI-Anrufe ohne benutzerdefinierte NIO sind in einem gewickelt Klasse namens NativeHooksImpl vereinfacht und reduzierte Version unten. public class NativeHooksImpl implementiert NativeHooks. private statische boolean linuxNative false. private statische NativeHooks Instanz neu NativeHooksImpl. public static NativeHooks instance. private statische native void jniSetPriority int Maske, int Priorität. Override public void setPriority Thread Thread, int Maske, int priority. jniSetPriority Maske, priority. To generieren die Header file. javah - force - classpath bin - o src SubMicroCorejni h. Sample Eintrag aus dem generierten Header Klar die tatsächliche Funktion muss mit der Definition übereinstimmen. JNIEXPORT void JNICALL JavacomrrcoreosNativeHooksImpljniSetPriority JNIEnv, jclass, jint, jint. Implementierung für die Set-Prioritätsmethode Beachten Sie, dass die Corbask und die Priorität für den CURRENT-Thread festgelegt werden. Rufen Sie diese Methode am Anfang der Thread-Laufmethode auf. SubMicroTrading behält alle Thread - und Prioritätszuordnungen bei Eine Konfigurationsdatei, die essentiell ist, verwende ich verschiedene configs für jeden anderen PC server. JNIEXPORT void JNICALL JavacomrrcoreosNativeHooksImpljniSetPriority JNIEnv env, jclass clazz, jint cpumask, jint priority. Für ein System, um so schnell wie möglich zu arbeiten, muss jede Codezeile optimal sein Sie nehmen den Ansatz des Schreibens fauler Code dann optimieren Sie werden am Ende umschreiben alles Ein Profiler gewann T helfen Sie auf der Nanosekundenebene, der Overhead des Laufen mit Profiler-Metriken werden Sie jagen Ihren Schwanz. Writing optimalen Code aus dem Beginn des Projekts ist einfach, richten Sie Codierung Standards und erzwingen Sie haben eine einfache Reihe von Richtlinien, die jeder folgt. Das synchronisierte Keyword war wirklich langsam und wurde mit komplexeren Sperrklassen, die in Präferenz verwendet wurden, vermieden. Aber mit dem Aufkommen von unter dem Cover Lock Spinnen Dies ist nicht mehr der Fall Das sagte sogar, wenn das Schloss war nicht konfrontiert Sie immer noch den Overhead von Eine Lese - und Schreib-Speicherbarriere So verwenden Sie synchronisiert, wo es absolut benötigt wird, dh wo Sie echte Parallelität haben. Key hier ist Anwendungsdesign, wo Sie wollen, dass Komponenten Single-Threaded und erreichen Durchsatz über gleichzeitige Instanzen, die unabhängig sind und keine Synchronisation benötigen. Minimise Nutzung von Flüchtige Variablen. Unterstand, wie Ihre Bausteine ​​arbeiten zB AtomicInteger, ConcurrentHashMap. Only verwenden gleichzeitige Techniken für den Code, der t benötigt O ist gleichzeitig. Minimise Verwendung von CAS-Operationen. Ein effizienter atomarer Betrieb Umgehung von OS und implementiert durch CPU-Anweisung Allerdings, um es atomar und konsistent wird eine Speicherbarriere schlagen Cache-Effektivität So verwenden Sie es wo nötig und nicht wo nicht. Warum kopieren Objekte unnötig. Ich sehe dies ein LOT und der Overhead kann bald aufstehen Gleiche gilt für den Puffer, um zwischen API-Layer vor allem im Socket-Code zu puffern. Kann ein Schmerz für Unit-Tests sein, aber echtes Problem kommt von der erforderlichen Parallelität des gemeinsamen Zustands über Instanzen hinweg In separaten Threads laufen. Ich habe an mehreren C - und Java-Systemen gearbeitet, bei denen statt eines realen Objektmodells abstrakte Konzepte mit Objektwerten verwendet wurden, die in Karten gespeichert sind. Nicht nur, dass diese Systeme langsam laufen, aber es fehlt ihnen, dass sie Zeit sicher sind und einfach sind Schmerzen Verwenden Sie Karten, wo sie gebraucht werden, z. B. eine Karte von Büchern oder eine Karte von Aufträgen SMT hat ein Ziel von höchstens einer Kartensuche für jedes event. Understand die Kosten für wachsende Sammlungen, zB ein HashMa P muss neue Array doppelte Größe erstellen dann rehash seine Elemente, eine teure Operation, wenn die Karte wächst in Hunderte von Tausenden Machen Sie Anfangsgröße konfigurierbar. At Ende des Tages schreiben Sie die Größe aller Sammlungen Next-Time-Prozess ist aufgeprallt Größe Vorherige gespeicherte max Erzeugen Sie andere Metriken wie Anzahl der angelegten Aufträge, Trefferprozentsatz, maximale Tickrate pro Sekunde Zahlen, die verwendet werden können, um die Leistung zu verstehen und Kontext einer unerwarteten Latenz zu verleihen. Use Objektorientierung. Unterstützung der Objektorientierung aufgrund der Angst vor den Kosten von vtable Lookups scheint mir falsch zu sein Ich kann es auf einer Mikroskala verstehen, aber auf einem Makro-Ende, um die Skala zu beenden Was ist der Einfluss In Java sind alle Methoden virtuell, aber der JIT-Compiler weiß, welche Klassen derzeit geladen sind und kann nicht nur eine vtable-Suche vermeiden Aber kann auch inline den Code Der Vorteil der Objektorientierung ist riesig Component Wiederverwendung und Erweiterbarkeit machen es einfach zu erweitern und erstellen Sie neue Strategien ohne Schwaden von Schnitt und Paste Code. Use Endgültiges Keyword everywhere. Help der JIT-Compiler optimieren Wenn in Zukunft eine Methode oder Klasse muss erweitern, dann können Sie immer entfernen Sie die endgültige Keyword. Keep-Methoden klein und leicht zu verstehen Große große Methoden werden nie kompiliert werden, große komplexe Methoden können kompiliert werden, aber Der Compiler kann Ende der Neukompilierung und Neukompilierung der Methode zu versuchen und zu optimieren David Straker schrieb KISS an der Tafel und ich habe es nie vergessen Wenn der Code ist leicht zu verstehen, dass s GOOD. Avoid Auto Boxing. Stick zu Primitiven und lange über lange und verwenden So vermeiden Sie alle Auto-Boxen Overhead-Stick die Auto-Boxen Warnung on. Immutable Objekte sind gut für langlebige Objekte, aber kann dazu führen, dass GC für etwas anderes zB ein Handelssystem mit Marktdaten würde GC jede Sekunde haben, wenn jede Tick erstellt eine unveränderliche POJO. String Ist unveränderlich und ist ein großes No-No für extrem niedrige Latenz-Systeme In SMT habe ich eine ZString unveränderliche String-ähnliche Schnittstelle Mit ViewString und ReusableString konkrete Implementierungen. Verwenden Sie Byte und Byte und vermeiden Sie tran Schiebe zwischen Byte und Char auf jedem IO-Betrieb. In den 80er Jahren erinnere ich mich an Gebäude NAND-Schaltungen, um Code darzustellen Es war ziemlich cool zu sehen, wie Code auf einer Schaltung Ebene implementiert werden könnte Was ich unsicher war, als ich begann SubMicroTrading war der Einfluss auf die Leistung Durch Java-Byte-Code und ob es irgendwelche möglichen Optimierungen zur Verfügung. Zu schneiden eine lange Geschichte kurz, fand ich nur eine lohnende Optimierung und das s, wie eine switch-Anweisung in Byte-Code dargestellt ist. Beachten Sie die folgenden switch statement. case 10 doAStuff brechen. Fall 20 doBStuff break. case 30 doCStuff break. case 40 doDStuff break. is konzeptionell das gleiche wie. if ein 10 doAStuff. else wenn ein 20 doBStuff. else wenn ein 30 doCStuff. else wenn ein 40 doDStuff. Think darüber, wenn Sie Parsing fix und du hast 1000 mögliche Fix-Tags und durchschnittlich 20 Felder in einer Nachricht Dann, um eine fix-Nachricht zu verarbeiten, könntest du vielleicht durchschnittlich 10.000 Vergleiche machen Wenn du 1.000.000 Events pro Sekunde verarbeiten willst, D werden 10.000.000.000 Vergleiche pro Sekunde Eine riesige Zahl, die auf lineare Top-down-Suche basieren würde, binäre Suche ist deutlich viel besser, aber Punkt ist es immer noch eine Kosten, die vermieden werden können. Java hat zwei Bytecodes für Switch-Anweisungen, die LookUpSwitch-Anweisung ist in Effekt eine Tabelle von Schlüsselwert zu springen Etikett dh Sie müssen die Tabelle suchen, um richtige Schlüsseleintrag zu finden TableSwitch ist in der Tat eine Tabelle der Sprung-Etiketten, die direkt durch den Schlüssel Wert minus der Tabelle Offset Ie niedrigste Schlüssel Wert in switch Anweisung indiziert werden. Für Ultra Low Latency sollten Sie erwägen, eine Ant-Task hinzuzufügen und den Bytecode für alle Lookupswitch-Anweisungen zu überprüfen. Für die Nachrichtenverarbeitung an den meisten Austäuschen können Sie sicherlich eine Switch-Anweisung erzwingen, um ein Tableswitch zu werden, indem sie Packer-Einträge hinzufügt, so dass es keine Lücken zwischen den Key-Werten gibt Meine CODEC-Generatoren stelle ich einen Max-Pack-Bereich zB 100, und alle spärlichen Werte werden innerhalb der Default-Anweisung zB über einen zweiten Switch oder if-Anweisung, wenn nur paar Tasten behandelt Von Interesse Wie alles ausprobieren mit echten Daten zu sehen Auswirkungen Für mich hat der Tische-Schalter riesigen Unterschied gemacht. Sample Tabellen-Schalter mit Packung Fall Aussagen. Hier ist der Beginn der switch-Anweisung innerhalb der Standard44Decoder generierte class. There ist kein JVM arg, das passt alle Anwendungen, Schlüssel hat ein wiederholbares volles Testbett und laufe volle Maßstabs-Benchmarks über Stunden nicht Sekunden Spülen und wiederholen Sie mehrmals für jeden Fall Änderung Die Args, die ich konzentriere, sind die auf SubMicroTrading, die kein GC durchführt und hat fast kein JIT Nachwärmen. Bitte beachten Sie, einige dieser Flaggen sind jetzt auf der Option sorry ich havent überprüft, immer noch wert, bringen sie auf die Aufmerksamkeit Ich denke. Für Standard-Java-Anwendungen, die viele GC mit hauptsächlich kurzlebigen Objekten zu tun, würde ich empfehlen, versuchen Sie die G1-Kollektor für Marktdaten Ich fand es viel besser als gleichzeitige Markierung Sweep Ich werde über das eine andere Zeit verbrachte Wochen abgestimmt schlecht gestaltete apps Beratung don t stören kaufen Zing. Note jedes Java-Upgrade bringt neue op Tionen und tweaks vorhandene Leistung, manchmal oben, manchmal unten, also re-Benchmark jedes Java-upgrade. Treat Mikro-Benchmarks mit Sorgfalt, diskutieren die Generika Benchmark und erklären, wie auf PC war anders als Linux. Avoid BiasedLocks sie eine regelmäßige Millisekunden Latenz in Systemen I Habe getestet. Rater als regurgitate, was ich vorher gegoogelt auf Verständnis von PrintCompilation. For ultra niedrige Latenz Sie wollen keine GC und keine JIT, so in SMT Ich vorzulassen Pools und laufen Warmup-Code dann aufrufen Ich nehme die letzte Compilation Eintrag dann während Re-Run kontrollierten Bank Test suchen für neue JIT-Ausgabe im Allgemeinen Neukompilierung Wenn dies geschieht, gehe ich zurück zu den Warm-Code und finde heraus, warum der Warmup-Code neu kompiliert werden muss Dies kommt in der Regel entweder auf den Code nicht aufgewärmt oder die Routine War zu kompliziert für den Compiler Entweder fügen Sie weitere Warmup-Code oder vereinfachen Sie die Routine Hinzufügen endgültig überall wirklich hilft. Writing Warmup-Code ist ein Schmerz, und ich bin ausgenommen die met Hod ist nicht implementiert oder zumindest war es nicht in Open JDK1 6 leere Methode doh Idealerweise würde ich dies aufrufen, wenn die Anwendung warm ist und keine Neukompilierung aufgrund der Compiler Denken, dass es weitere Optimierungen machen kann. Java kann neu kompilieren und neu kompilieren dies nur passiert in Meine Erfahrung, wenn die Methode zu komplex ist, weil eine Neukompilierung fällig ist, weil Java eine nicht endgültige Methode inlineiert und die Optimierung war verfrüht, dann muss der Code korrigiert werden Was möchte ich Neukompilierungsoptimierungen von Randfällen vermeiden, die selten in Codezweige gehen. Hinweis Sie können kein GC und kein JIT unter irgendeiner Situation in einem komplexen System garantieren Was Sie tun können, ist sicherzustellen, dass kein JIT GC für KEY bestimmte Szenarien, dass die Geschäftsforderung Wenn ein Handelssystem 10 Millionen Trades pro Tag macht, würde ich ein Ziel von nein setzen GC JIT unter NORMAL Bedingungen mit 30 Millionen Trades dann überprüfen Leistung bis zu 100 Millionen zu sehen, an welcher Stelle Jitter auftreten Wenn zum Beispiel die Austausch trennen Sie während der da Y, und das kickt in ein paar Millisekunden von JIT ist es nicht wichtig Sie don t brauchen Pool jedes Objekt nur die Schlüssel diejenigen, die GC verursachen Mehr auf, dass in Zukunft Blog auf SuperPools. Ich erinnere mich an Gil Tene von Azul, während der Arbeit bei Morgan Stanley und haben wirklich versucht zu bekommen, wie viel mehr JIT von Schmerzen ist als GC Einige spannende Entwicklungen scheinen mit Zing gemacht worden zu sein, und ich hätte mich sehr daran interessiert, das zu beurteilen, dass ich leider nicht mal Zeit habe. Sehr beeindruckt von Azul Und Gil und wie sie auf Fragen antworten und ihr Produkt so viel besser verbessern als Sun Oracle waren mit Java. SubMicroTrading JVM Argumente.

No comments:

Post a Comment