{"id":14,"date":"2026-01-05T21:38:54","date_gmt":"2026-01-06T00:38:54","guid":{"rendered":"https:\/\/tiagoiwamoto.com.br\/?p=14"},"modified":"2026-01-08T21:31:34","modified_gmt":"2026-01-09T00:31:34","slug":"java-25-chegou-o-lts-que-deixa-o-java-mais-rapido-limpo-e-moderno","status":"publish","type":"post","link":"https:\/\/tiagoiwamoto.com.br\/?p=14","title":{"rendered":"Java 25 chegou: o LTS que deixa o Java mais \u201cr\u00e1pido, limpo e moderno\u201d"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">1) Linguagem mais \u201cdireta ao ponto\u201d<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 JEP 512 \u2014 Compact Source Files + Instance Main Methods<\/h3>\n\n\n\n<p>Agora d\u00e1 pra escrever Java \u201cmodo r\u00e1pido\u201d, sem classe e sem <code>static<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void main() {\n  System.out.println(\"Hello, Java 25!\");\n}\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"969\" height=\"656\" src=\"https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_01_compact_source.png\" alt=\"\" class=\"wp-image-15\" srcset=\"https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_01_compact_source.png 969w, https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_01_compact_source-300x203.png 300w, https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_01_compact_source-768x520.png 768w\" sizes=\"auto, (max-width: 969px) 100vw, 969px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">JEP 513 \u2014 Flexible Constructor Bodies<\/h3>\n\n\n\n<p>Construtores ficaram menos \u201cengessados\u201d. Isso ajuda muito quando voc\u00ea quer validar\/normalizar antes de finalizar a cria\u00e7\u00e3o do objeto (sem gambiarra mental). <a href=\"https:\/\/openjdk.org\/projects\/jdk\/25\/\" target=\"_blank\" rel=\"noreferrer noopener\">openjdk.org<\/a><\/p>\n\n\n\n<p>Exemplo (ideia pr\u00e1tica): normalizar campos e ainda manter a delega\u00e7\u00e3o de forma mais flex\u00edvel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class User {\n  final String name;\n\n  User(String name) {\n    name = name == null ? \"anon\" : name.trim();\n    this.name = name;\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">JEP 507 (Preview) \u2014 Primitivos em patterns, <code>instanceof<\/code> e <code>switch<\/code><\/h3>\n\n\n\n<p>Pattern matching ficou mais completo: agora d\u00e1 pra trabalhar com <strong>primitivos<\/strong> tamb\u00e9m. <a href=\"https:\/\/openjdk.org\/projects\/jdk\/25\/\" target=\"_blank\" rel=\"noreferrer noopener\">openjdk.org+1<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static String vibe(Object x) {\n  return switch (x) {\n    case int i    -&gt; \"int: \" + (i * 2);\n    case long l   -&gt; \"long: \" + l;\n    case String s -&gt; \"texto: \" + s.toUpperCase();\n    default       -&gt; \"misterioso\";\n  };\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">JEP 511 \u2014 Module Import Declarations<\/h3>\n\n\n\n<p>Mais ergonomia pra modularidade: voc\u00ea consegue \u201cimportar m\u00f3dulo\u201d de forma expl\u00edcita no c\u00f3digo, deixando depend\u00eancias mais \u00f3bvias no dia a dia.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">2) Concorr\u00eancia com menos dor e mais \u201ccontrole\u201d<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddf5 JEP 444 Virtual threads<\/h3>\n\n\n\n<p>Trabalhar com v\u00e1rias tasks async fica mais \u201corganizado\u201d: voc\u00ea cria um <strong>escopo<\/strong> e tudo vive\/morre junto (inclusive erros). <a href=\"https:\/\/openjdk.org\/projects\/jdk\/25\/\" target=\"_blank\" rel=\"noreferrer noopener\">openjdk.org<\/a><\/p>\n\n\n\n<p>Exemplo (conceito):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {\n            executor.submit(() -> processar());\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"642\" src=\"https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_02_structured_scoped-1024x642.png\" alt=\"\" class=\"wp-image-16\" srcset=\"https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_02_structured_scoped-1024x642.png 1024w, https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_02_structured_scoped-300x188.png 300w, https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_02_structured_scoped-768x481.png 768w, https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_02_structured_scoped.png 1047w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">JEP 506 \u2014 Scoped Values<\/h3>\n\n\n\n<p>Uma alternativa moderna ao <code>ThreadLocal<\/code> pra \u201cpassar contexto\u201d (requestId, tenant, trace\u2026) sem virar bagun\u00e7a em c\u00f3digo concorrente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">3) Performance e runtime (o \u201cturbo\u201d do JDK)<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde0 JEP 519 \u2014 Compact Object Headers<\/h3>\n\n\n\n<p>Mais efici\u00eancia de mem\u00f3ria: <strong>headers menores<\/strong> \u2192 mais objetos cabendo no heap e potencial ganho de performance. <a href=\"https:\/\/openjdk.org\/projects\/jdk\/25\/\" target=\"_blank\" rel=\"noreferrer noopener\">openjdk.org+1<\/a><\/p>\n\n\n\n<p>E detalhe importante: a flag <code>-XX:+\/-UseCompactObjectHeaders<\/code> virou op\u00e7\u00e3o \u201cproduct\u201d.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">JEP 514 \u2014 AOT Command-Line Ergonomics<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcc8 JEP 515 \u2014 AOT Method Profiling<\/h3>\n\n\n\n<p>Facilitam e melhoram o uso de <strong>Ahead-of-Time<\/strong> (linha Leyden) pra acelerar startup e aquecimento (especialmente em apps grandes).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">JEP 521 \u2014 Generational Shenandoah<\/h3>\n\n\n\n<p>Coletor Shenandoah com abordagem geracional (\u00f3timo pra reduzir pausas e lidar melhor com objetos \u201cjovens\u201d).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">JEP 503 \u2014 Remove 32-bit x86 Port<\/h3>\n\n\n\n<p>Adeus suporte ao port 32-bit x86: menos custo de manuten\u00e7\u00e3o, foco no que importa hoje.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"635\" src=\"https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_03_performance-1024x635.png\" alt=\"\" class=\"wp-image-17\" srcset=\"https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_03_performance-1024x635.png 1024w, https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_03_performance-300x186.png 300w, https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_03_performance-768x476.png 768w, https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_03_performance.png 1058w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">4) Observabilidade n\u00edvel \u201cpro gamer\u201d (JFR)<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u23f1\ufe0f JEP 509 \u2014 JFR CPU-Time Profiling (Experimental)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddea JEP 518 \u2014 JFR Cooperative Sampling<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd0e JEP 520 \u2014 JFR Method Timing &amp; Tracing<\/h3>\n\n\n\n<p>Pra quem ca\u00e7a gargalo, isso \u00e9 ouro: mais formas de medir CPU, sampling e timing de m\u00e9todos com JFR.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">5) Seguran\u00e7a e cripto mais f\u00e1cil de usar<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd11 JEP 510 \u2014 Key Derivation Function API<\/h3>\n\n\n\n<p>API padr\u00e3o pra KDF (tipo HKDF\/PBKDF2\/afins dependendo do provider), ajudando a fazer a coisa certa sem \u201cinventar cripto\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"969\" height=\"656\" src=\"https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_04_crypto.png\" alt=\"\" class=\"wp-image-18\" srcset=\"https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_04_crypto.png 969w, https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_04_crypto-300x203.png 300w, https:\/\/tiagoiwamoto.com.br\/wp-content\/uploads\/2026\/01\/java25_04_crypto-768x520.png 768w\" sizes=\"auto, (max-width: 969px) 100vw, 969px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">6) \u201cS\u00f3 mais uma dose\u201d de APIs avan\u00e7adas<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddee JEP 508 (Incubator) \u2014 Vector API (10\u00aa incuba\u00e7\u00e3o)<\/h3>\n\n\n\n<p>Pra computa\u00e7\u00e3o vetorial\/SIMD (processamento num\u00e9rico, multim\u00eddia, ML\u2026). <a href=\"https:\/\/openjdk.org\/projects\/jdk\/25\/\" target=\"_blank\" rel=\"noreferrer noopener\">openjdk.org<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">7) Compact Object Headers \u2014 JEP 519 (Java 25 LTS)<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>-XX:+UseCompactObjectHeaders<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>1) Linguagem mais \u201cdireta ao ponto\u201d \u2705 JEP 512 \u2014 Compact Source Files + Instance Main Methods Agora d\u00e1 pra escrever Java \u201cmodo r\u00e1pido\u201d, sem classe e sem static: JEP 513 \u2014 Flexible Constructor Bodies Construtores ficaram menos \u201cengessados\u201d. Isso ajuda muito quando voc\u00ea quer validar\/normalizar antes de finalizar a cria\u00e7\u00e3o do objeto (sem gambiarra&#8230;<\/p>\n","protected":false},"author":1,"featured_media":20,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[2],"tags":[],"class_list":["post-14","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14"}],"version-history":[{"count":3,"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/14\/revisions"}],"predecessor-version":[{"id":23,"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/14\/revisions\/23"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=\/wp\/v2\/media\/20"}],"wp:attachment":[{"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tiagoiwamoto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}