Performance benchmarks in Java are easy to misunderstand. Recently the Quarkus team published new benchmark results. But the interesting story isn’t just the numbers. It’s the engineering work behind them: controlled environments, reproducible runs, and transparency about how the results are produced. People like Holly Cummins, Eric Deandrea, Sanne Grinovero and many others invested real engineering effort to make these benchmarks trustworthy. In this article I explain: • Why benchmarking Java frameworks is harder than it looks • Why local laptop benchmarks are often misleading • What developers should actually learn from the new Quarkus numbers If you care about startup time, memory footprint, and real JVM performance, this is worth understanding. Read the full article here: https://lnkd.in/dANEJp8d #Java #Quarkus #PerformanceEngineering #Microservices #JVM #Benchmarking
Markus Eisele’s Post
More Relevant Posts
-
🔥 After 9 years of Java development, here's the #1 insight I wish I had on Day 1: The JVM is your best friend — if you understand it. Most devs write Java for years without ever looking at: → How the Garbage Collector actually works → What happens during class loading → Why JIT compilation changes everything at runtime After nearly a decade, I can tell you: every major performance bug I've solved came down to JVM internals. ✅ Learn G1GC vs ZGC vs Shenandoah ✅ Use -XX flags to tune heap size and GC behavior ✅ Read GC logs — they tell you the whole story You don't need to be a JVM engineer. But you DO need to know what's happening under the hood. What JVM concept changed how you write Java? Drop it below 👇 #Java #JVM #SoftwareDevelopment #BackendDevelopment #JavaDeveloper
To view or add a comment, sign in
-
Understanding the Java Virtual Machine (JVM) The JVM is the core of Java’s “Write Once, Run Anywhere” philosophy. This diagram highlights how Java code flows through the JVM: Compilation – Java source code is compiled into platform-independent bytecode - Class Loader – Loads, verifies, and initializes classes - Runtime Memory – Manages key areas like Heap, Stacks, and Method Area - Execution Engine – Uses Interpreter + JIT Compiler for performance - Garbage Collector – Automatically handles memory cleanup - JNI – Enables integration with native libraries (C/C++) The JVM abstracts hardware complexity, providing performance, security, and portability—all in one runtime. If you’re working with backend systems, understanding JVM internals is a game changer for performance tuning and scalability. #Java #JVM #Backend #SoftwareEngineering #Microservices #Performance #Programming
To view or add a comment, sign in
-
-
𝗢𝘁𝗵𝗲𝗿 𝗔𝗽𝗽𝗿𝗼𝗮𝗰𝗵𝗲𝘀 𝗳𝗼𝗿 𝗖𝗿𝗲𝗮𝘁𝗶𝗻𝗴 𝗮 𝗦𝗶𝗻𝗴𝗹𝗲𝘁𝗼𝗻 𝗖𝗹𝗮𝘀𝘀 Beyond synchronized methods or double-checked locking, Java provides cleaner approaches that rely on JVM guarantees. Enum Singleton: The enum approach ensures a single instance because the JVM creates it only once during class initialization. It is inherently thread-safe and also handles serialization and reflection concerns. This approach is eager, meaning initialization happens when the class is loaded. Static Inner Class (Bill Pugh Singleton): This approach uses lazy initialization. The inner class is loaded only when it is first accessed. JVM class loading guarantees thread safety, ensuring that the instance is created only once even in concurrent scenarios. The key idea is leveraging JVM class loading behavior instead of relying on explicit synchronization. #Java #DesignPatterns #Singleton #SoftwareEngineering #BackendDevelopment
To view or add a comment, sign in
-
Stop treating Thread states as a mystery. 🔍 We often talk about multithreading in Java, but how often do we really visualize the Thread lifecycle? When you understand the transition from NEW to TERMINATED, you’re not just memorizing states—you’re learning how to: ✅ Diagnose thread contention. ✅ Debug deadlocks effectively. ✅ Build more performant backend systems. In our latest "Backend Simplified" video, we break down the entire lifecycle. No fluff—just the core architecture you need to write production-grade concurrent code. If you are a student prepping for interviews or a dev looking to refine your concurrency skills, this one is for you. Watch it here: 👉 https://lnkd.in/gTQJVPRK What’s the most frustrating thread-state issue you’ve had to debug recently? Let’s discuss below! 👇 #Java #Concurrency #MultiThreading #BackendDevelopment #SoftwareEngineering #CareerGrowth #BackendSimplified
To view or add a comment, sign in
-
-
🚀 Most Java developers think performance = better algorithms That’s incomplete. Real performance in Java often comes from what the JVM removes, not what you write. 👉 Escape Analysis (JVM optimization) The JVM checks whether an object “escapes” a method or thread. If it doesn’t, the JVM can: ✨ Allocate it on the stack (not heap) ✨ Remove synchronization (no locks needed) ✨ Eliminate the object entirely (scalar replacement) Yes — your object might never exist at runtime. 💡 Example: public void process() { User u = new User("A", 25); int age = u.getAge(); } If u never escapes this method, JVM can optimize it to: int age = 25; ❌ No object ❌ No GC pressure ❌ No overhead 📉 Where developers go wrong: • Creating unnecessary shared state • Overusing synchronization • Forcing objects onto the heap ✅ What you should do instead: • Keep objects local • Avoid unnecessary sharing between threads • Write code the JVM can optimize 🔥 Key Insight: Performance in Java isn’t just about writing efficient code. It’s about writing code the JVM can optimize. If you ignore this, you’re solving the wrong problem. #Java #JVM #Performance #SoftwareEngineering #BackendDevelopment
To view or add a comment, sign in
-
Double-checked locking in Java looks correct… but it’s broken without volatile. Why? Because of instruction reordering by the JVM. Object creation is NOT atomic: 1. Allocate memory 2. Assign reference 3. Initialize object Steps 2 and 3 can be reordered. So another thread might get a reference to an object that is not fully initialized ❌ This leads to subtle and hard-to-debug bugs. Fix: Use volatile with double-checked locking. private static volatile Singleton instance; Lesson: Concurrency bugs don’t fail fast — they fail silently. #Java #Multithreading #Concurrency #Backend #SoftwareEngineering #JVM
To view or add a comment, sign in
-
Day 59 — LeetCode Progress (Java) Problem: Count the Number of Consistent Strings Required: Given a string allowed and an array of strings words, return the number of consistent strings (strings that contain only characters from allowed). Idea: Use a HashSet for fast lookup to check whether each character in a word is allowed. Approach: Store all characters of allowed in a HashSet. Iterate through each word: Check every character in the word If any character is not in the set, the word is invalid Count all valid (consistent) words. Time Complexity: O(n × m) Space Complexity: O(1) #LeetCode #DSA #Java #HashSet #Strings #Algorithms #CodingJourney #100DaysOfCode
To view or add a comment, sign in
-
-
💡 𝗝𝗮𝘃𝗮/𝐒𝐩𝐫𝐢𝐧𝐠 𝐁𝐨𝐨𝐭 𝗧𝗶𝗽 - 𝗦𝘄𝗶𝘁𝗰𝗵 𝗘𝘅𝗽𝗿𝗲𝘀𝘀𝗶𝗼𝗻 💎 🕯 𝗧𝗿𝗮𝗱𝗶𝘁𝗶𝗼𝗻𝗮𝗹 𝗦𝘄𝗶𝘁𝗰𝗵 𝗦𝘁𝗮𝘁𝗲𝗺𝗲𝗻𝘁 The traditional switch statement has been part of Java since the beginning. It requires explicit break statements to prevent fall-through, which can lead to bugs if forgotten. Each case must contain statements that execute sequentially, making the code verbose and error-prone. 💡 𝗠𝗼𝗱𝗲𝗿𝗻 𝗦𝘄𝗶𝘁𝗰𝗵 𝗘𝘅𝗽𝗿𝗲𝘀𝘀𝗶𝗼𝗻 Switch expressions were introduced in Java 14 as a more concise and safe alternative. Using the -> syntax, you eliminate the need for break statements and can directly return values. Multiple cases can be grouped with commas, and the compiler enforces exhaustiveness for better safety. ✅ 𝗞𝗲𝘆 𝗕𝗲𝗻𝗲𝗳𝗶𝘁𝘀 ◾ No break statements, safer and cleaner code. ◾ Direct value assignment, treat switch as an expression. ◾ Multiple labels with comma separation. ◾ Compiler exhaustiveness checks, fewer runtime errors. 🤔 Which one do you prefer? #java #springboot #programming #softwareengineering #softwaredevelopment
To view or add a comment, sign in
-
-
Java Streams Series – Day 7 Today I explored an efficient approach to check whether a string is a palindrome using Java Streams. Instead of using traditional loops or reversing the string, this approach applies a functional style to compare characters from both ends, progressing toward the center. By iterating through only half of the string, it maintains optimal performance while keeping the implementation concise and readable. This reinforces how Java Streams can help write clean, declarative, and efficient code for common problems. #Java #JavaStreams #CleanCode #FunctionalProgramming #100DaysOfCode
To view or add a comment, sign in
-
-
The Java Exception Hierarchy: Know your tools. 🛠️ In Java, not all errors are created equal. Understanding the difference between Checked, Unchecked, and Errors is the "Aha!" moment for many developers. Checked Exceptions: Your "Expect the unexpected" scenarios (e.g., IOException). The compiler forces you to handle these. Unchecked Exceptions (Runtime): These are usually "Programmer Oopsies" (e.g., NullPointerException). They represent bugs that should be fixed, not just caught. Errors: The "System is on fire" scenario (e.g., OutOfMemoryError). Don't try to catch these; just let the ship sink gracefully. Mastering this hierarchy is the difference between writing "working" code and "production-ready" code. #JavaDevelopment #Coding #TechEducation #JVM #SoftwareArchitecture
To view or add a comment, sign in
More from this author
-
The Main Thread Weekly, CW 13: Testing MCP Servers, Taming Kubernetes, and Making Java Systems Agent-Ready
Markus Eisele 1mo -
The Main Thread Weekly, CW 12 / 2026 - Performance, identity, and shipping real tools
Markus Eisele 1mo -
Platforms, safety nets, and the quiet details that keep systems alive - CW 11
Markus Eisele 1mo
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development
Great points on benchmarking fairness! Few people talk about it openly, glad to see the method open-sourced. I assume the experiments used an open workload model; just curious, did you also explore a closed model (Hyperfoil supports it too)? I’ve found the closed model useful for identifying systems capacity (max throughput) and the “knee” concurrency as the first step.