This podcast explores techniques for building high-performance Java applications, focusing on topics like efficient data processing, leveraging modern JVM features, and designing durable execution engines. It highlights the impact of compact object headers, concurrent garbage collectors, and lightweight concurrency with Virtual Threads on application performance and resource utilization. The discussion also touches upon building zero-dependency data parsers to mitigate supply chain risks and improve efficiency.
Read original on InfoQ ArchitectureGunnar Morling discusses his experiences in building high-performance applications in Java, particularly within the data space. The conversation covers lessons learned from initiatives like the One Billion Row Challenge (1BRC), the benefits of modern Java versions, and the architectural considerations behind durable execution engines and a new zero-dependency Apache Parquet parser named Hardwood. This provides valuable insights into optimizing Java for demanding system design scenarios.
Modern Java versions offer significant out-of-the-box performance enhancements critical for system design. Key improvements include:
Upgrade Your JVM
Regularly upgrading to newer Java LTS versions (like Java 17 as the new baseline) provides substantial performance, memory, and observability benefits with minimal application code changes. This is a low-effort, high-impact architectural decision that can significantly improve system efficiency and reduce operational costs.
Durable execution engines are an architectural pattern that allows for defining complex, long-running workflows as plain, end-to-end code. This simplifies the implementation of resumable and recoverable processes, reducing the need for extensive external infrastructure. Such engines ensure that multi-step operations can withstand failures and resume from the point of interruption, offering strong guarantees for business processes. The underlying state storage can be highly optimized (e.g., using SQLite in C) while the execution logic remains within Java.
The development of Hardwood, a Java parser for Apache Parquet, emphasizes a zero-dependency approach. This architectural choice addresses several critical system design concerns: