// Platform Engineering

GraalVM and the Architectural Discipline of Native Images

Published Feb 2026 • 3 min read

I started exploring GraalVM Native Image when Spring Boot first introduced official native support, more than three years ago. Interestingly, the JVM vs. native debate still isn’t settled. But it’s rarely just about startup speed.

For me, the real value of native compilation wasn’t raw performance—it was the architectural discipline it forces onto a system. Native compilation removes much of the JVM safety net. Suddenly, reflection isn’t invisible, framework initialization becomes explicit, and dependencies that “just worked” start breaking under closed-world assumptions.

The Crucible of Native Cryptography

One of the most challenging and rewarding parts of this journey was adapting security-heavy components that were never designed for native environments.

From building a full FIDO2 / WebAuthn server to getting Post-Quantum Cryptography running via Bouncy Castle, making deep cryptography behave inside native images requires serious structural discipline. Reflection metadata, initialization timing, and hidden state assumptions quickly surface. It felt less like optimization, and more like architectural archaeology—digging into framework behaviour, reflection paths, and lifecycle assumptions the JVM normally hides.

The Real Tradeoffs

The tradeoffs of moving to GraalVM are very real:

The Challenges

  • Longer build times and complex CI/CD pipelines.
  • Required architectural refactoring for legacy libraries.
  • Careful reflection and initialization management.

The Benefits

  • Significantly smaller runtime footprint.
  • Highly predictable startup behaviour.
  • Lower resource consumption and unique latency characteristics difficult to replicate through JVM tuning alone.

Looking Forward

What makes the conversation more interesting today is how much the JVM itself has evolved. With Java 25 and the direction of Spring Boot 4, AOT and startup optimizations are improving, making the decision less about speed and more about architecture and operational context.

Native images aren’t always the right answer. But they force a level of architectural honesty that remains valuable, even if you ultimately stay on the JVM.

← Back to Writing