<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Java on Bits, Trades &amp; Systems</title>
    <link>https://blog.turboawesome.win/tags/java/</link>
    <description>Recent content in Java on Bits, Trades &amp; Systems</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 20 Feb 2019 11:33:00 +0000</lastBuildDate>
    <atom:link href="https://blog.turboawesome.win/tags/java/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Go for the Seasoned Java Developer: What Feels Familiar, What Doesn&#39;t</title>
      <link>https://blog.turboawesome.win/2019/02/go-for-the-seasoned-java-developer-what-feels-familiar-what-doesnt/</link>
      <pubDate>Wed, 20 Feb 2019 11:33:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2019/02/go-for-the-seasoned-java-developer-what-feels-familiar-what-doesnt/</guid>
      <description>After seven years of Java, switching to Go as a primary language. The frictions, the surprises, and what I&amp;#39;d tell my past self.</description>
    </item>
    <item>
      <title>Backpressure in Practice: Keeping Fast Producers from Killing Slow Consumers</title>
      <link>https://blog.turboawesome.win/2018/06/backpressure-in-practice-keeping-fast-producers-from-killing-slow-consumers/</link>
      <pubDate>Thu, 14 Jun 2018 10:33:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2018/06/backpressure-in-practice-keeping-fast-producers-from-killing-slow-consumers/</guid>
      <description>Every system has components that produce faster than consumers can handle under some conditions. Backpressure is the mechanism by which fast producers are slowed rather than dropping data or consuming unbounded memory. Here&amp;#39;s what the options look like in practice.</description>
    </item>
    <item>
      <title>Project Loom Preview: Virtual Threads and What They Mean for Server Code</title>
      <link>https://blog.turboawesome.win/2018/05/project-loom-preview-virtual-threads-and-what-they-mean-for-server-code/</link>
      <pubDate>Thu, 24 May 2018 09:38:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2018/05/project-loom-preview-virtual-threads-and-what-they-mean-for-server-code/</guid>
      <description>Project Loom&amp;#39;s virtual threads promise to fix Java&amp;#39;s thread-per-request scalability problem by making millions of lightweight threads practical. Here&amp;#39;s what the early design looked like and why it matters for server-side Java.</description>
    </item>
    <item>
      <title>From Java 8 to Java 11 in a Regulated Environment: What Actually Broke</title>
      <link>https://blog.turboawesome.win/2017/11/from-java-8-to-java-11-in-a-regulated-environment-what-actually-broke/</link>
      <pubDate>Wed, 08 Nov 2017 11:23:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2017/11/from-java-8-to-java-11-in-a-regulated-environment-what-actually-broke/</guid>
      <description>Migrating a large financial institution&amp;#39;s Java estate from Java 8 to Java 11 involved removing internal APIs, JPMS module system friction, and more dependency surprises than expected. What actually broke and how we fixed it.</description>
    </item>
    <item>
      <title>Building MiFID II Trade Reporting Infrastructure: An Engineer&#39;s View</title>
      <link>https://blog.turboawesome.win/2017/10/building-mifid-ii-trade-reporting-infrastructure-an-engineers-view/</link>
      <pubDate>Tue, 03 Oct 2017 11:45:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2017/10/building-mifid-ii-trade-reporting-infrastructure-an-engineers-view/</guid>
      <description>MiFID II required every trade to be reported within 15 minutes of execution. Building the infrastructure to meet that requirement across a large, heterogeneous estate taught us about the gap between regulatory requirements and production reality.</description>
    </item>
    <item>
      <title>Stream Processing with Kafka Streams vs Flink: A Real Comparison</title>
      <link>https://blog.turboawesome.win/2017/09/stream-processing-with-kafka-streams-vs-flink-a-real-comparison/</link>
      <pubDate>Wed, 27 Sep 2017 14:02:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2017/09/stream-processing-with-kafka-streams-vs-flink-a-real-comparison/</guid>
      <description>We evaluated Kafka Streams and Apache Flink for a real-time trade enrichment and aggregation pipeline. The technical comparison produced a clear result; the operational comparison was more nuanced.</description>
    </item>
    <item>
      <title>Reading GC Logs Like a Detective</title>
      <link>https://blog.turboawesome.win/2017/04/reading-gc-logs-like-a-detective/</link>
      <pubDate>Tue, 18 Apr 2017 09:11:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2017/04/reading-gc-logs-like-a-detective/</guid>
      <description>GC logs are the most information-dense diagnostic output the JVM produces, and most engineers never learn to read them properly. A guide to interpreting G1GC logs and using them to diagnose real production problems.</description>
    </item>
    <item>
      <title>Threading Models in Java: Which One Does Your System Actually Need?</title>
      <link>https://blog.turboawesome.win/2016/11/threading-models-in-java-which-one-does-your-system-actually-need/</link>
      <pubDate>Wed, 09 Nov 2016 10:22:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2016/11/threading-models-in-java-which-one-does-your-system-actually-need/</guid>
      <description>Thread-per-request, event-loop, work-stealing, single-threaded with message passing — Java supports all of them, but each optimises for different things. Choosing the wrong model means fighting the runtime rather than working with it.</description>
    </item>
    <item>
      <title>Heap Dumps and Flight Recorder: Diagnosing JVM Memory Problems in Production</title>
      <link>https://blog.turboawesome.win/2016/08/heap-dumps-and-flight-recorder-diagnosing-jvm-memory-problems-in-production/</link>
      <pubDate>Wed, 24 Aug 2016 14:55:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2016/08/heap-dumps-and-flight-recorder-diagnosing-jvm-memory-problems-in-production/</guid>
      <description>Heap dumps and Java Flight Recorder are the two tools that diagnose production JVM memory problems. Understanding how to capture them without killing the service, and how to read what they tell you, is a gap in most JVM engineers&amp;#39; toolkits.</description>
    </item>
    <item>
      <title>Five Years in High-Frequency Trading: What I Actually Learned</title>
      <link>https://blog.turboawesome.win/2015/11/five-years-in-high-frequency-trading-what-i-actually-learned/</link>
      <pubDate>Thu, 12 Nov 2015 16:03:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/11/five-years-in-high-frequency-trading-what-i-actually-learned/</guid>
      <description>Looking back at five years of low-latency systems work: what the environment teaches you that you can&amp;#39;t learn elsewhere, and what habits it instils that don&amp;#39;t always transfer cleanly to other domains.</description>
    </item>
    <item>
      <title>ZGC and Shenandoah: What Low-Pause GC Means for Trading Systems</title>
      <link>https://blog.turboawesome.win/2015/10/zgc-and-shenandoah-what-low-pause-gc-means-for-trading-systems/</link>
      <pubDate>Thu, 01 Oct 2015 09:44:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/10/zgc-and-shenandoah-what-low-pause-gc-means-for-trading-systems/</guid>
      <description>In 2015 the JVM GC landscape was about to change significantly. ZGC and Shenandoah were in development, promising sub-millisecond GC pauses regardless of heap size. Here&amp;#39;s what the previews looked like and what they meant for latency-sensitive Java.</description>
    </item>
    <item>
      <title>Understanding Safepoints: The JVM Pauses Nobody Talks About</title>
      <link>https://blog.turboawesome.win/2015/05/understanding-safepoints-the-jvm-pauses-nobody-talks-about/</link>
      <pubDate>Wed, 27 May 2015 14:38:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/05/understanding-safepoints-the-jvm-pauses-nobody-talks-about/</guid>
      <description>GC pauses get all the attention, but safepoints are a broader category of JVM stop-the-world events that affect latency in ways GC tuning can&amp;#39;t fix.</description>
    </item>
    <item>
      <title>Memory-Mapped Files in Java: Chronicle and the Art of Zero-Copy I/O</title>
      <link>https://blog.turboawesome.win/2015/04/memory-mapped-files-in-java-chronicle-and-the-art-of-zero-copy-i/o/</link>
      <pubDate>Wed, 15 Apr 2015 09:53:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/04/memory-mapped-files-in-java-chronicle-and-the-art-of-zero-copy-i/o/</guid>
      <description>Memory-mapped files let you treat disk storage as if it&amp;#39;s RAM — the OS handles the mapping and caching transparently. Chronicle Queue uses this to give you a persistent ordered log with throughput approaching raw memory bandwidth.</description>
    </item>
    <item>
      <title>Building a Trade Blotter That Doesn&#39;t Lie Under Load</title>
      <link>https://blog.turboawesome.win/2015/03/building-a-trade-blotter-that-doesnt-lie-under-load/</link>
      <pubDate>Wed, 04 Mar 2015 10:12:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/03/building-a-trade-blotter-that-doesnt-lie-under-load/</guid>
      <description>A trade blotter shows traders their current positions and recent executions. When the system is under load, naive implementations show stale, inconsistent, or missing data. Here&amp;#39;s the design that kept our blotter honest.</description>
    </item>
    <item>
      <title>Chronicle Queue vs Kafka: Choosing a Persistent Journal at Nanosecond Scale</title>
      <link>https://blog.turboawesome.win/2015/01/chronicle-queue-vs-kafka-choosing-a-persistent-journal-at-nanosecond-scale/</link>
      <pubDate>Wed, 21 Jan 2015 10:44:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/01/chronicle-queue-vs-kafka-choosing-a-persistent-journal-at-nanosecond-scale/</guid>
      <description>Both Chronicle Queue and Kafka provide persistent, ordered message logs. Their performance profiles, operational models, and use cases are almost completely different.</description>
    </item>
    <item>
      <title>End-of-Year Architecture Review: What Held, What Failed, What Changed</title>
      <link>https://blog.turboawesome.win/2014/12/end-of-year-architecture-review-what-held-what-failed-what-changed/</link>
      <pubDate>Wed, 10 Dec 2014 14:33:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2014/12/end-of-year-architecture-review-what-held-what-failed-what-changed/</guid>
      <description>A look back at three years of building HFT infrastructure: the components that held up under production load, the ones that were redesigned, and the architectural decisions I&amp;#39;d make differently now.</description>
    </item>
    <item>
      <title>Benchmarking Without Lying: JMH, Coordinated Omission, and Honest Numbers</title>
      <link>https://blog.turboawesome.win/2014/10/benchmarking-without-lying-jmh-coordinated-omission-and-honest-numbers/</link>
      <pubDate>Wed, 29 Oct 2014 10:14:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2014/10/benchmarking-without-lying-jmh-coordinated-omission-and-honest-numbers/</guid>
      <description>Most latency benchmarks are wrong in the same ways. JMH solves the JVM measurement problems; coordinated omission is the harder issue that lives above it.</description>
    </item>
    <item>
      <title>Aeron: Reliable UDP Multicast for Market Data Distribution</title>
      <link>https://blog.turboawesome.win/2014/09/aeron-reliable-udp-multicast-for-market-data-distribution/</link>
      <pubDate>Wed, 17 Sep 2014 13:28:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2014/09/aeron-reliable-udp-multicast-for-market-data-distribution/</guid>
      <description>Aeron is a message transport library built around reliable UDP and memory-mapped files, designed for the sub-microsecond latency and high throughput that market data distribution demands. Here&amp;#39;s what it looks like in practice.</description>
    </item>
    <item>
      <title>Choosing a GC Collector for Low-Latency Java: A Practical Comparison</title>
      <link>https://blog.turboawesome.win/2014/08/choosing-a-gc-collector-for-low-latency-java-a-practical-comparison/</link>
      <pubDate>Wed, 06 Aug 2014 10:18:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2014/08/choosing-a-gc-collector-for-low-latency-java-a-practical-comparison/</guid>
      <description>CMS vs G1 vs parallel GC vs no-GC strategies. The tradeoffs as they actually played out in a latency-sensitive financial application, with real numbers.</description>
    </item>
    <item>
      <title>Busy Spinning vs Blocking: Thread Strategies for Ultra-Low Latency</title>
      <link>https://blog.turboawesome.win/2014/05/busy-spinning-vs-blocking-thread-strategies-for-ultra-low-latency/</link>
      <pubDate>Wed, 14 May 2014 10:31:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2014/05/busy-spinning-vs-blocking-thread-strategies-for-ultra-low-latency/</guid>
      <description>Blocking a thread hands control to the OS scheduler and costs you microseconds on wake-up. Busy spinning wastes a CPU core. The right choice depends on your latency target and hardware budget.</description>
    </item>
  </channel>
</rss>
