<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/jep-544-ahead-of-time-code-compilation-hnqenmv6i" -->

---
title: JEP 544: Ahead-of-Time Code Compilation | daily.dev
description: JEP 544, targeted for JDK 28, extends HotSpot's AOT cache to store fully optimized native code compiled during a training run. This AOT code loads instantly at...
canonical: https://daily.dev/posts/jep-544-ahead-of-time-code-compilation-hnqenmv6i
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: JEP 544: Ahead-of-Time Code Compilation | daily.dev
og:description: JEP 544, targeted for JDK 28, extends HotSpot's AOT cache to store fully optimized native code compiled during a training run. This AOT code loads instantly at...
og:url: https://daily.dev/posts/jep-544-ahead-of-time-code-compilation-hnqenmv6i
og:image: https://api.daily.dev/og/posts/hNQeNmv6i.png
og:image:alt: JEP 544: Ahead-of-Time Code Compilation
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# JEP 544: Ahead-of-Time Code Compilation

**[Inside Java](https://daily.dev/sources/inside_java)** · 16 min read · 0 upvotes · 0 comments

## Summary

JEP 544, targeted for JDK 28, extends HotSpot's AOT cache to store fully optimized native code compiled during a training run. This AOT code loads instantly at startup instead of being recompiled, and HotSpot still falls back to JIT compilation if the workload changes. In benchmarks on a two-core Linux/x64 system, the AOT cache alone cut startup time by 50% to 70%, and adding AOT code pushed that to 65% to 80%. A javac benchmark showed a 75% total startup improvement with AOT code versus 30% from the cache alone. It requires no code changes and currently supports AArch64 and x64 with the Serial, Parallel, G1, Shenandoah, and ZGC collectors.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://inside.java/2026/10/25/jep544-target-jdk28>

## Questions this post answers

### What is JEP 544 and how does it improve Java startup time?

JEP 544 extends the HotSpot JVM's AOT cache to store optimized native code compiled during a training run, so it loads instantly at startup instead of being recompiled. Targeted for JDK 28, it supports AArch64 and x64 CPUs, requires no application code changes, and falls back to JIT compilation if cached code is unusable or the workload changes.

_Teams tracking JVM startup performance can follow JEP progress like this one on daily.dev._

### How much does AOT code improve JVM startup and warmup time compared to the AOT cache alone?

On a two-core Linux/x64 benchmark of five framework-based applications, the AOT cache alone reduced startup time by about 50% to 70%, and adding AOT code pushed that to roughly 65% to 80%. A javac benchmark showed the cache alone gave a 30% startup improvement, while adding AOT code brought the total to about 75%.

_Developers benchmarking JVM warmup gains can keep tabs on OpenJDK performance work via daily.dev._

### Why can't HotSpot just use static ahead-of-time compilation instead of JIT compilation?

Static compilation lacks three advantages that dynamic compilation provides: agility to reoptimize as workloads change, portability across different hardware and software without recompiling, and compatibility with dynamic Java features like class loading, dynamic dispatch, and reflection. HotSpot's JEP 544 instead combines both by caching AOT-compiled native code while still allowing JIT deoptimization and reoptimization.

_Java engineers weighing static versus dynamic compilation trade-offs can track this debate on daily.dev._

## Similar posts on daily.dev

- [Ahead-of-Time Class Loading & Linking](https://daily.dev/posts/ahead-of-time-class-loading-linking-yftlbv7es) · Baeldung · 0 upvotes · 0 comments
- [Run Into the New Year with Java’s Ahead-of-Time Cache Optimizations – Inside.java](https://daily.dev/posts/run-into-the-new-year-with-java-s-ahead-of-time-cache-optimizations-inside-java-75zsl41gf) · Inside Java · 1 upvotes · 0 comments
- [A Guide to Ahead-of-Time Cache in the Java](https://daily.dev/posts/a-guide-to-ahead-of-time-cache-in-the-java-xfptxkmvl) · Baeldung · 3 upvotes · 0 comments
- [How is Leyden improving Java Performance? Part 2 of](https://daily.dev/posts/how-is-leyden-improving-java-performance-part-2-of-k95xs5i7z) · Foojay.io · 1 upvotes · 0 comments

---

Tags: [#performance](https://daily.dev/tags/performance), [#java](https://daily.dev/tags/java), [#jvm](https://daily.dev/tags/jvm), [#compiler-optimization](https://daily.dev/tags/compiler-optimization)

[View this post on daily.dev](https://daily.dev/posts/jep-544-ahead-of-time-code-compilation-hnqenmv6i)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"JEP 544: Ahead-of-Time Code Compilation","url":"https://daily.dev/posts/jep-544-ahead-of-time-code-compilation-hnqenmv6i","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/jep-544-ahead-of-time-code-compilation-hnqenmv6i"},"datePublished":"2026-10-25T07:23:59.494Z","dateModified":"2026-10-25T07:24:31.302Z","description":"JEP 544, targeted for JDK 28, extends HotSpot's AOT cache to store fully optimized native code compiled during a training run. This AOT code loads instantly at...","image":"https://media.daily.dev/image/upload/s--58gMhC4P--/f_auto/v1722860399/public/Placeholder%2012","thumbnailUrl":"https://media.daily.dev/image/upload/s--58gMhC4P--/f_auto/v1722860399/public/Placeholder%2012","isAccessibleForFree":true,"articleSection":"Inside Java","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Inside Java","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/de5992d95f374790bdfd2ae03a16f6e3","url":"https://daily.dev/sources/inside_java"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/jep-544-ahead-of-time-code-compilation-hnqenmv6i","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"performance,java,jvm,compiler-optimization","timeRequired":"PT16M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Inside Java","item":"https://daily.dev/sources/inside_java"},{"@type":"ListItem","position":3,"name":"JEP 544: Ahead-of-Time Code Compilation"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/jep-544-ahead-of-time-code-compilation-hnqenmv6i#faq","mainEntity":[{"@type":"Question","name":"What is JEP 544 and how does it improve Java startup time?","acceptedAnswer":{"@type":"Answer","text":"JEP 544 extends the HotSpot JVM's AOT cache to store optimized native code compiled during a training run, so it loads instantly at startup instead of being recompiled. Targeted for JDK 28, it supports AArch64 and x64 CPUs, requires no application code changes, and falls back to JIT compilation if cached code is unusable or the workload changes. Teams tracking JVM startup performance can follow JEP progress like this one on daily.dev."}},{"@type":"Question","name":"How much does AOT code improve JVM startup and warmup time compared to the AOT cache alone?","acceptedAnswer":{"@type":"Answer","text":"On a two-core Linux/x64 benchmark of five framework-based applications, the AOT cache alone reduced startup time by about 50% to 70%, and adding AOT code pushed that to roughly 65% to 80%. A javac benchmark showed the cache alone gave a 30% startup improvement, while adding AOT code brought the total to about 75%. Developers benchmarking JVM warmup gains can keep tabs on OpenJDK performance work via daily.dev."}},{"@type":"Question","name":"Why can't HotSpot just use static ahead-of-time compilation instead of JIT compilation?","acceptedAnswer":{"@type":"Answer","text":"Static compilation lacks three advantages that dynamic compilation provides: agility to reoptimize as workloads change, portability across different hardware and software without recompiling, and compatibility with dynamic Java features like class loading, dynamic dispatch, and reflection. HotSpot's JEP 544 instead combines both by caching AOT-compiled native code while still allowing JIT deoptimization and reoptimization. Java engineers weighing static versus dynamic compilation trade-offs can track this debate on daily.dev."}}]}
```

