Java 25 chegou: o LTS que deixa o Java mais “rápido, limpo e moderno”
1) Linguagem mais “direta ao ponto”
✅ JEP 512 — Compact Source Files + Instance Main Methods
Agora dá pra escrever Java “modo rápido”, sem classe e sem static:
void main() {
System.out.println("Hello, Java 25!");
}

JEP 513 — Flexible Constructor Bodies
Construtores ficaram menos “engessados”. Isso ajuda muito quando você quer validar/normalizar antes de finalizar a criação do objeto (sem gambiarra mental). openjdk.org
Exemplo (ideia prática): normalizar campos e ainda manter a delegação de forma mais flexível:
class User {
final String name;
User(String name) {
name = name == null ? "anon" : name.trim();
this.name = name;
}
}
JEP 507 (Preview) — Primitivos em patterns, instanceof e switch
Pattern matching ficou mais completo: agora dá pra trabalhar com primitivos também. openjdk.org+1
static String vibe(Object x) {
return switch (x) {
case int i -> "int: " + (i * 2);
case long l -> "long: " + l;
case String s -> "texto: " + s.toUpperCase();
default -> "misterioso";
};
}
JEP 511 — Module Import Declarations
Mais ergonomia pra modularidade: você consegue “importar módulo” de forma explícita no código, deixando dependências mais óbvias no dia a dia.
2) Concorrência com menos dor e mais “controle”
🧵 JEP 444 Virtual threads
Trabalhar com várias tasks async fica mais “organizado”: você cria um escopo e tudo vive/morre junto (inclusive erros). openjdk.org
Exemplo (conceito):
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> processar());
}

JEP 506 — Scoped Values
Uma alternativa moderna ao ThreadLocal pra “passar contexto” (requestId, tenant, trace…) sem virar bagunça em código concorrente.
3) Performance e runtime (o “turbo” do JDK)
🧠 JEP 519 — Compact Object Headers
Mais eficiência de memória: headers menores → mais objetos cabendo no heap e potencial ganho de performance. openjdk.org+1
E detalhe importante: a flag -XX:+/-UseCompactObjectHeaders virou opção “product”.
JEP 514 — AOT Command-Line Ergonomics
📈 JEP 515 — AOT Method Profiling
Facilitam e melhoram o uso de Ahead-of-Time (linha Leyden) pra acelerar startup e aquecimento (especialmente em apps grandes).
JEP 521 — Generational Shenandoah
Coletor Shenandoah com abordagem geracional (ótimo pra reduzir pausas e lidar melhor com objetos “jovens”).
JEP 503 — Remove 32-bit x86 Port
Adeus suporte ao port 32-bit x86: menos custo de manutenção, foco no que importa hoje.

4) Observabilidade nível “pro gamer” (JFR)
⏱️ JEP 509 — JFR CPU-Time Profiling (Experimental)
🧪 JEP 518 — JFR Cooperative Sampling
🔎 JEP 520 — JFR Method Timing & Tracing
Pra quem caça gargalo, isso é ouro: mais formas de medir CPU, sampling e timing de métodos com JFR.
5) Segurança e cripto mais fácil de usar
🔑 JEP 510 — Key Derivation Function API
API padrão pra KDF (tipo HKDF/PBKDF2/afins dependendo do provider), ajudando a fazer a coisa certa sem “inventar cripto”.

6) “Só mais uma dose” de APIs avançadas
🧮 JEP 508 (Incubator) — Vector API (10ª incubação)
Pra computação vetorial/SIMD (processamento numérico, multimídia, ML…). openjdk.org
7) Compact Object Headers — JEP 519 (Java 25 LTS)
-XX:+UseCompactObjectHeaders