Patnáctého září 2026 vyšla Java 27. Je to osmnácté vydání v řadě, které dorazilo přesně podle půlročního harmonogramu, a na první pohled nepřináší nic, co by se dalo prodat jedním titulkem: devět JEPů, žádná velká novinka v syntaxi jazyka, žádná dlouhodobá podpora.

Java 27 nepřidává funkce, které musíte zapnout. Mění výchozí chování, se kterým aplikace poběží, aniž by kdokoli změnil jediný řádek kódu: menší paměťová stopa objektů, jiný garbage collector v kontejnerech, kvantově odolné šifrování TLS a záznamy z diagnostiky, ve kterých se už neobjeví heslo k databázi. Backendový inženýr Arvind Kumar to pro server The Register shrnul tak, že JDK 27 je vydání, ve kterém Java přestává žádat o souhlas s rozumnými výchozími hodnotami a prostě je zapne.

V tomto článku projdeme, co konkrétně se mění, komu to pomůže, a na co si dát při přechodu pozor. Snažili jsme se psát tak, aby text dával smysl vývojářům i lidem, kteří o provozu Javy ve firmě rozhodují.

Co je JEP a proč se u Javy počítají

JEP (JDK Enhancement Proposal) je formální návrh změny platformy Java – nové funkce jazyka, knihovny, nástroje nebo chování virtuálního stroje. Každý JEP má číslo a status. Final znamená hotovou funkci zapnutou ve výchozím stavu. Preview je funkce kompletní, ale ještě podléhající změnám; zapíná se přepínačem –enable-preview a do produkce nepatří. Incubator je ještě ranější fáze určená k experimentování. Od Javy 8 se počet hotových JEPů zvýšil z 56 na 372.

Devět JEPů a 2286 vyřešených úkolů

Java 27 obsahuje čtyři hotové funkce (final), čtyři náhledy (preview) a jednu inkubační funkci. Vedle toho přináší desítky menších vylepšení, která vlastní JEP nemají: rychlejší kryptografické algoritmy, efektivnější souborové a nativní vstupně-výstupní operace, ladění velikosti haldy u G1 nebo optimalizace kompilátoru C2.

Graf níže ukazuje, jak se od Javy 8 hromadí hotové JEPy a vyřešené úkoly.

Úkolem se rozumí každá položka uzavřená v evidenci vývoje JDK (JDK Bug System): oprava chyby, drobné vylepšení, výkonová optimalizace nebo dílčí krok při implementaci některého JEPu. Zatímco JEPů je v každém vydání jen několik, úkolů jsou tisíce – a právě z nich se skládají ona „menší vylepšení bez vlastního JEPu“ zmíněná výše.

Stojí za pozornost, že tempo je od přechodu na půlroční cyklus (Java 10, březen 2018) prakticky konstantní: každé vydání přidá zhruba dva tisíce vyřešených úkolů, ať už jde o verzi s dlouhodobou podporou (LTS) nebo ne. Java 27 jich přinesla 2 286.

Java 8 až Java 27
Osmnáct vydání v řadě, každé půl roku, bez skluzu
Přepněte mezi počtem hotových JEPů a počtem vyřešených úkolů. Najetím na sloupec zobrazíte, kolik dané vydání přidalo. Zeleně jsou verze s dlouhodobou podporou (LTS), tmavě Java 27.
  • 9 JEPů v Javě 27: 4 hotové, 4 náhledy, 1 inkubace
  • 372 hotových JEPů celkem od Javy 8 (tehdy 56)
  • 2 286 vyřešených úkolů (Jira) jen v Javě 27
  • 16 % oprav v Javě 27 dodali nezávislí vývojáři
Zdroj dat: Oracle Java Blog, „The Arrival of Java 27“ (září 2026). Vyřešené úkoly = položky v JDK Bug System (Jira) uzavřené pro dané vydání, kumulativně od Javy 8.

Pro rozhodování ve firmě je důležité jedno: Java 27 není LTS verze. Aktualizace k ní budou vycházet do března 2027, kdy ji nahradí Java 28. Poslední LTS je Java 25 ze září 2025, další bude Java 29 v září 2027. Většina firem tedy Javu 27 do produkce nenasadí, ale všechno, co níže popisujeme, v Javě 29 bude. Berte tento článek jako náhled toho, co vás za rok čeká i bez vlastního přičinění.

LTS (Long-Term Support) je verze Javy, ke které výrobce vydává bezpečnostní a opravné aktualizace několik let, u Oraclu typicky osm i více. Vychází každé dva roky – naposledy Java 25 (září 2025), příště Java 29 (září 2027). Ostatní verze mezi nimi dostávají aktualizace jen šest měsíců, tedy do vydání verze následující. Firmy proto v produkci provozují zpravidla LTS verze; ty mezilehlé slouží hlavně k vyzkoušení novinek, které se v příští LTS objeví najednou.

Kompaktní hlavičky objektů: čtyři bajty, které se sčítají (JEP 534)

Každý objekt v Javě nese kromě vlastních dat ještě hlavičku. Ta obsahuje identifikační hash, informace o zamykání, věk objektu pro garbage collector a ukazatel na třídu. Na 64bitových systémech měla tato hlavička 96 bitů, tedy 12 bajtů. Java 27 ji ve výchozím stavu zmenšuje na 64 bitů, tedy 8 bajtů.

Čtyři bajty nezní jako mnoho. Jenže typická podniková aplikace drží v paměti miliony malých objektů – řetězce, obalové typy, položky kolekcí, záznamy z databáze. U objektu, který má sám o sobě 16 nebo 24 bajtů, tvoří hlavička třetinu až polovinu jeho velikosti.

Číslům lze věřit, protože funkce má za sebou dlouhý test. V Javě 24 byla experimentální, v Javě 25 dostupná pro produkci, ale vypnutá. Amazon ji mezitím nasadil na stovky produkčních služeb a SAP ji zapnul jako výchozí ve své distribuci SapMachine. Na benchmarku SPECjbb2015 vykázala o 22 % menší haldu a o 8 % nižší spotřebu CPU. Autor webu HappyCoders Sven Woltmann uvádí typickou úsporu 10–20 % paměti a 5–10 % vyšší propustnost u aplikací s mnoha malými objekty.

JEP 534 · Kompaktní hlavičky objektů
Co se v hlavičce objektu změnilo a kolik paměti to ušetří
Každý objekt v Javě nese hlavičku s metadaty. Kompaktní varianta ji zmenšuje ze 12 na 8 bajtů tím, že slučuje dvě samostatná slova do jednoho. Dostupná je od Javy 24, produkčně použitelná od Javy 25 – Java 27 ji jako první zapíná automaticky. V rozkladu bitů vidíte, co v hlavičce je; v kalkulačce si spočítejte, kolik to znamená pro vaši aplikaci.
Klasická hlavička výchozí do Javy 26 · Mark Word (64 b) + Class Word (32 b)
96 bitů = 12 B
hash 31
věk
z
nevyužito 27
ukazatel na třídu 32
Kompaktní hlavička výchozí od Javy 27 (volitelně už od Javy 25) · jedno slovo
64 bitů = 8 B
hash 31
věk
z
třída 22
f
V
−32 bitů
na každý objekt
  • identity hash
  • věk pro GC
  • zámek
  • nevyužito
  • ukazatel na třídu
  • self-forwarded
  • rezerva Valhalla
V čem je trik: Mark Word měl 27 bitů, které nikdo nepoužíval. Ukazatel na třídu se podařilo zkomprimovat z 32 na 22 bitů, takže se do volného místa vešel i s rezervou. Druhé slovo hlavičky tím přestalo být potřeba.
Kolik to ušetří jen na hlavičkách
Posuňte jezdec na odhadovaný počet živých objektů v haldě vaší aplikace. Výsledek zahrnuje pouze hlavičky; skutečná úspora bývá vyšší díky zarovnání a lepší lokalitě dat.
Klasické hlavičky (12 B) 600 MB
Kompaktní hlavičky (8 B) 400 MB
Ušetřená paměť bez změny kódu (v Javě 27 automaticky) 200 MB
Naměřeno v praxi: benchmark SPECjbb2015 s kompaktními hlavičkami vykázal o 22 % menší haldu a o 8 % nižší spotřebu CPU. Amazon funkci provozuje na stovkách produkčních služeb, SAP ji zapnul jako výchozí v SapMachine.

Co to znamená prakticky: stejná aplikace se vejde do menšího kontejneru, nebo se na stejný server vejde více instancí. Zaplatíte za to jen tím, že Java 27 odstranila přepínač -XX:-UseCompressedClassPointers – komprimované ukazatele na třídy jsou nyní povinné. Pokud ho máte v konfiguraci, JVM s ním nenastartuje. Kdo by chtěl kompaktní hlavičky vypnout, může použít -XX:-UseCompactObjectHeaders, počítejte ale s tím, že i tento přepínač je určen k postupnému odstranění.

G1 všude: konec nechtěného Serial GC v kontejnerech (JEP 523)

Tato změna je nenápadná, ale pro provoz v cloudu možná nejdůležitější. JVM si při startu vybírá garbage collector podle toho, na jak silném stroji běží. Dosud platilo, že na „slabém“ počítači – s jedním procesorem nebo méně než 1 792 MB paměti – zvolila jednoduchý Serial GC, který zastavuje celou aplikaci na dobu úklidu paměti.

Háček je v tom, co JVM považuje za slabý počítač. Kontejner s limitem jednoho CPU nebo 1,5 GB RAM je z jejího pohledu přesně to. Technický autor Egor Pishii z PVS-Studio upozorňuje, že nemalá část kontejnerizovaných Java aplikací tak celou dobu běžela na Serial GC, aniž by o tom kdokoli vědomě rozhodl.

Java 27 dělá z G1 (Garbage-First) výchozí kolektor ve všech prostředích. Podle autorů JEPu je výkon G1 dostatečný, aby Serial nahradil ve všech situacích, kde by ho JVM dříve vybrala. Kdo Serial GC skutečně chce, například na malých embedded zařízeních, může ho dál zapnout přepínačem -XX:+UseSerialGC.

Na co si dát pozor při přechodu

Spolu s G1 se změnily i výchozí hodnoty pro velikost haldy. Parametry MinHeapFreeRatio a MaxHeapFreeRatio mají místo 40 % a 70 % nově 0 % a 100 %, halda se tedy zmenšuje a zvětšuje jen v krajních případech. Přepínač -XX:InitiatingHeapOccupancyPercent byl přejmenován na -XX:G1IHOP. Zcela odstraněno bylo rozhraní JVMCI pro zásuvné kompilátory. Pokud máte tyto věci v konfiguraci nebo ve skriptech pro nasazení, je čas je projít.

TLS připravené na kvantové počítače (JEP 527)

Bezpečnostní komunita už několik let varuje před útokem typu „ulož teď, dešifruj později“. Útočník dnes zaznamená šifrovaný provoz a počká, až bude mít k dispozici kvantový počítač schopný prolomit současné algoritmy pro výměnu klíčů. Pro data, která mají zůstat tajná deset a více let – zdravotní záznamy, smlouvy, státní agendy – je to reálná hrozba už nyní.

Java 27 proto do TLS 1.3 přidává hybridní výměnu klíčů, která kombinuje klasický algoritmus ECDHE s post-kvantovým ML-KEM standardizovaným americkým institutem NIST. Výchozí varianta X25519MLKEM768 se zapne automaticky, jakmile ji podporuje i druhá strana; v opačném případě spojení proběhne klasicky. Aplikace používající standardní API javax.net.ssl nemusí měnit nic. Kdo potřebuje i varianty SecP256r1MLKEM768 nebo SecP384r1MLKEM1024, nastaví je vlastností jdk.tls.namedGroups.

Za zmínku stojí i to, co se do JEPu nevešlo: kryptografické algoritmy ML-KEM, ML-DSA, X25519 a Ed25519 dostaly výrazné výkonové optimalizace a příkaz jcmd VM.security_properties nově ukáže, s jakým bezpečnostním nastavením běžící JVM skutečně pracuje. Pro audit je to praktičtější než hádat z konfiguračních souborů.

Flight Recorder přestává vynášet hesla (JEP 536)

Java Flight Recorder (JFR) je vestavěný diagnostický nástroj, který zaznamenává, co se v běžící aplikaci děje. Součástí záznamu byly odjakživa i parametry příkazové řádky, systémové vlastnosti a proměnné prostředí – tedy přesně místa, kam se z pohodlnosti dávají hesla k databázím, API klíče a tokeny. Záznam se pak pošle dodavateli nebo nahraje do sdíleného úložiště a tajemství putují s ním.

Java 27 tato data začerňuje přímo v procesu, ještě než záznam opustí JVM. Ve výchozím stavu se maskují hodnoty, jejichž název obsahuje výrazy jako password, secret, token, credential, api key nebo private key. Seznam lze rozšířit, nahradit nebo načíst ze souboru.

JEP 536 · Flight Recorder
Stejný příkaz, stejná aplikace – jiná Java
Vyberte verzi Javy a spusťte simulaci. Aplikace dostane heslo k databázi třemi obvyklými cestami: proměnnou prostředí, systémovou vlastností a argumentem programu. Pak se podíváme, co z toho skončí v diagnostickém záznamu.
bash – java 25.0.1 – ~/app
# Klikněte na „Spustit záznam“app@prod:~$ 
Zatím nic nezaznamenáno. Klikněte na „Spustit záznam“.
Simulace. Výstup je zkrácený a upravený pro čitelnost, odpovídá ale chování popsanému v JEP 536: Java 27 ve výchozím stavu maskuje hodnoty, jejichž název obsahuje výrazy jako password, secret, token, credential, api key nebo private key. Seznam lze upravit přepínačem -XX:FlightRecorderOptions:redact-key=….

Je to jedna z těch změn, kterou nikdo neocení, dokud se mu nestane opak. Pro firmy, které musí prokázat, kudy jejich tajemství putují, je to ale konkrétní argument do bezpečnostní dokumentace.

Co si zatím zkoušejí vývojáři: náhledové funkce

Čtyři preview funkce a jedna inkubační ukazují, kam Java směřuje. Do produkce nepatří, ale stojí za to je znát, protože se v LTS verzi za rok velmi pravděpodobně objeví jako hotové.

  • Líné konstanty (JEP 531, třetí náhled). API LazyConstant a továrny List.ofLazy, Map.ofLazy a nově Set.ofLazy umožňují spočítat hodnotu až při prvním použití, bezpečně z více vláken a jen jednou. JVM se k ní pak chová jako ke skutečné konstantě, tedy stejně rychle jako k poli final. Typicky se hodí na drahé inicializace – validátory, připojení, načtení konfigurace – bez ručních zámků a kontrol na null.
  • Primitivní typy ve vzorech (JEP 532, pátý náhled). Konstrukce switch a instanceof nově pracují s int, long, double a dalšími primitivními typy včetně podmínek when. Kód, který dosud vyžadoval kaskádu if–else, se dá napsat jako jeden přehledný switch.
  • Strukturovaná souběžnost (JEP 533, sedmý náhled). Skupina souvisejících úloh běžících v různých vláknech se ošetřuje jako jeden celek: pokud jedna selže, ostatní se zruší, žádné vlákno nezůstane viset. V Javě 27 se změnil typ vyhazované výjimky (ExecutionException místo FailedException) a přibyla konfigurace přes open(cfg -> …) s časovým limitem a pojmenováním.
  • PEM kódování kryptografických objektů (JEP 538, třetí náhled). Načtení šifrovaného privátního klíče z PEM souboru dnes vyžaduje zhruba dvacet řádků kódu s ručním stříháním hlaviček a dekódováním Base64. Nové API PEMDecoder a PEMEncoder to zvládne na tři řádky.
  • Vector API (JEP 537, dvanáctá inkubace). Beze změn oproti Javě 26. API čeká na hodnotové třídy z projektu Valhalla (JEP 401), které mají přijít v Javě 28; teprve pak se posune do náhledu.

Následující prvek ukazuje čtyři z těchto funkcí na srovnání „dříve a nyní“. Příklady vycházejí z článku Svena Woltmanna na HappyCoders.eu.

Náhledové funkce Javy 27
Dříve a nyní: co se vývojářům zjednoduší
Vyberte funkci. V bloku „Dříve“ je kód, který dnes vývojáři píší, v bloku „Java 27“ totéž s novým API. Všechny čtyři funkce jsou v Javě 27 ve stavu preview, tedy zapínají se přepínačem --enable-preview a do produkce zatím nepatří.
Ukázky „nyní“ vycházejí z článku Svena Woltmanna (HappyCoders.eu, Java 27 Features). Ukázky „dříve“ jsou běžné idiomy, kterými se totéž řeší v současné Javě.

Kdo Javu vlastně vyvíjí

Java bývá vnímána jako produkt Oraclu, a Oracle skutečně odvádí většinu práce. Na Javě 27 se ale podílely také Alibaba, Amazon, ARM, Google, IBM, Microsoft, NVIDIA, Red Hat, SAP a další firmy – a nezávislí vývojáři, kteří dodali 16 % všech oprav. Vydání před zveřejněním testovali správci knihoven, na kterých stojí prakticky každá podniková aplikace: Apache Maven, Apache Tomcat, JUnit 5, Apache Lucene, jOOQ nebo Byte Buddy.

Pro firmu, která na Javě staví, je to podstatná informace. Platforma není závislá na jediném dodavateli a její vývoj běží už osmnáct vydání v řadě bez skluzu, což je v softwarovém světě vzácné.

Máte přejít na Javu 27?

Záleží na tom, kde jste dnes.

  • Provozujete Javu 25 (LTS). Zůstaňte. Kompaktní hlavičky objektů si můžete vyzkoušet už teď přepínačem -XX:+UseCompactObjectHeaders a ověřit si úsporu paměti na vlastní aplikaci (od Java 24 experimentálně, od Java verze 25 plně integrováno, ale vypnuto ve výchozím nastavení). G1 jako výchozí kolektor vás čeká v Javě 29; do té doby se vyplatí zkontrolovat, jaký kolektor vaše kontejnery skutečně používají.
  • Provozujete Javu 17 nebo 21. Java 27 pro vás není cílová verze, ale ukazuje, co všechno se změnilo v oblasti paměti a bezpečnosti. Plánujte přechod na Javu 25 a využijte ho ke zjištění, kolik paměti vaše aplikace ve skutečnosti potřebují.
  • Stále běžíte na Javě 8 nebo 11. Tady je otázka spíš ekonomická než technická: kolik vás stojí bezpečnostní záplaty pro verzi, kterou většina distribucí už dlouho podporuje jen komerčně. Přechod není otázkou jedné verze, ale rozhodnutí o celé strategii – včetně toho, zda zůstat u Oracle JDK nebo přejít na OpenJDK distribuci jako Azul.
  • Vyvíjíte nové systémy. Java 27 je ideální verze pro testovací prostředí a pro seznámení týmu s náhledovými funkcemi, hlavně se strukturovanou souběžností. Do produkce ji ale nasazujte s vědomím, že v březnu 2027 skončí její aktualizace a budete muset přejít na Javu 28.

Java 27 není verze, kterou byste museli mít. Je to verze, která ukazuje, že Java po třiceti letech dospěla do fáze, kdy za vás dělá správná rozhodnutí sama. Výhody té nejdůležitější změny – kompaktních hlaviček – navíc nemusíte čekat, stačí je zapnout ve verzi, kterou už máte.

Hledáme programátory, kteří Javě rozumí

V Solutii stavíme na Javě informační systémy pro střední a velké firmy i státní instituce, a lidi, kteří ji ovládají, hledáme prakticky neustále. Pokud vás při čtení napadlo, že byste některou z těchto věcí rádi zkusili v praxi, podívejte se na naše otevřené pozice.

Kariéra v Solutii
Píšete v Javě? Hledáme právě vás
Vyvíjíme informační systémy pro střední a velké firmy i státní instituce a programátory se znalostí Javy hledáme prakticky pořád. Pokud vás baví stavět systémy, na kterých závisí provoz celých organizací, podívejte se, koho zrovna hledáme.
  • Systémy, na kterých záleží
    Aplikace pro firmy a státní správu, kde je Java páteří provozu, ne doplňkem.
  • Celý životní cyklus
    Od návrhu architektury přes vývoj až po nasazení a provoz. Uvidíte, jak váš kód žije.
  • Prostor pro nové věci
    Nové verze Javy, cloud i AI nástroje zkoušíme v praxi, ne jen na konferencích.

Zdroje

Chcete být informováni o nových článcích na blogu Solutia?

Sledujte aktuální novinky a trendy z IT světa na našem profilu.

Sledovat na LinkedIn