JVM G1 and ZGC Tuning on AWS Corretto for ECS and EKS
Quick summary: Heap too small triggers G1 humongous allocations; too large balloons pause times on Graviton. Corretto on ECS/EKS/Lambda Java—when ZGC generational beats G1 for API heaps.
Key Takeaways
- Heap too small triggers G1 humongous allocations; too large balloons pause times on Graviton
- Corretto on ECS/EKS/Lambda Java—when ZGC generational beats G1 for API heaps
- Amazon Corretto 21+ (June 2026) defaults to G1 on server classpaths; ZGC with generational mode targets sub-ms pauses on large heaps (>8 GB)
- What to do this week 1
- Enable GC logs to CloudWatch via sidecar or JFR snapshots on load test
Table of Contents
Amazon Corretto 21+ (June 2026) defaults to G1 on server classpaths; ZGC with generational mode targets sub-ms pauses on large heaps (>8 GB).
Tuning signals on AWS
| Signal | Action |
|---|---|
Pause Young high | Increase -Xmx or reduce allocation rate |
| Humongous objects | Object size > 50% G1 region—fix batch sizes |
| Container OOM | -XX:MaxRAMPercentage=75 on ECS/EKS cgroups |
Lambda Java — minimize heap; cold start includes JVM init—consider SnapStart (where supported) or Graal native for latency SLO.
What to do this week
- Enable GC logs to CloudWatch via sidecar or JFR snapshots on load test.
- Match container memory limit to heap + native + metaspace headroom.
- A/B G1 vs ZGC on same
c7gtask size with identical load.
What this guide doesn’t cover
Virtual threads—part 2 of runtime track.
AWS Cloud Architect & AI Expert
AWS-certified cloud architect and AI expert with deep expertise in cloud migrations, cost optimization, and generative AI on AWS.