Článek přečtěte do 4 min.

Co představuje výkon Javy

Je zřejmé, že se jedná o složité a komplikované téma, o kterém bychom mohli diskutovat hodiny, ne-li dny.

Odpověď, ke které jsem ale přišel, byla, že existují tři základní koncepty, které si musíte být vědomi:

  1. Latence. Protože JVM automaticky zpracovává správu paměti aplikace, může to mít zásadní vliv na to, jak rychle aplikace reaguje na požadavek. Pokud garbage collector (GC) pozastaví aplikační vlákna během své práce, může to vést ke zpoždění odezvy, které může trvat i několik minut.
  2. Propustnost. Kolik transakcí za sekundu dokáže aplikace zpracovat? To bude silně záviset na dostupných hardwarových zdrojích – jádrech, paměti atd. – a na tom, jak efektivně dokáže JVM převést bajtkódy na nativní instrukce pomocí kompilace just-in-time (JIT).
  3. Doba zahřívání. Jemnějším, ale stejně důležitým faktorem výkonu je doba zahřívání aplikace. Bajtkódy splňují slib Javy „zapiš jednou, spusti kdekoli “, ale když je JVM interpretuje, běží mnohem pomaleji než nativní kód. Proto byl v JDK 1.2 přidán JIT. Identifikace veškerého často používaného kódu a jeho kompilace však nějakou dobu trvá. Doba zahřívání je tedy doba potřebná k dosažení optimální úrovně výkonu aplikace (a tedy i propustnosti v transakcích za sekundu).

V posledních 30 letech jsme byli svědky pozoruhodného množství přístupů k řešení těchto tří aspektů výkonu Javy. Stačí si vzpomenout na počet algoritmů generování kryptoměn (GC), které JVM zahrnuje. I nyní vidíme značné úsilí věnované projektu Leyden v OpenJDK, jehož cílem je řešit problémy s dobou zahřívání.

Existovaly také projekty mimo základní platformu Java, které vyvíjely způsoby, jak zlepšit výkon. Jedním z nejvýznamnějších byl GraalVM.

Co bych měl vědět o GraalVM?

GraalVM se bohužel stal poněkud přetíženým termínem zahrnujícím několik vzájemně propojených projektů. Začalo to jako výzkumný projekt v Sun Labs a po akvizici společnosti Sun Microsystems pokračovalo v Oracle. GraalVM dodal sadu technologií navržených pro běhové prostředí pro polyglotové prostředí.

Toto jsou základní části:

  • JIT kompilátor Graal. Toto byl původní projekt Graal, který se snadno zamění s GraalVM. Jedná se o JIT kompilátor napsaný výhradně v Javě; myšlenka je, že použití Javy by usnadnilo údržbu a vylepšování kompilátoru.
  • Interpretační framework jazyka Truffle. Poskytuje způsob, jak přeložit různé programovací jazyky, včetně Javy, do formy, kterou může kompilátor Graal JIT zkompilovat.
  • Virtuální stroj Substrate. Jedná se o vložitelný virtuální stroj pro podmnožinu Javy, optimalizovaný pro předběžné spouštění jazyků Truffle.
  • Pro uživatele, kteří hledají výkonnější běhové prostředí Java, GraalVM umožnil vytváření nativních obrazů aplikace. S odkazem na mé výše uvedené definice to poskytlo přesvědčivé řešení pouze pro třetí aspekt: ​​dobu zahřívání. Přímou kompilací do nativních instrukcí pro cílovou platformu a začleněním Substrate JVM se eliminuje JIT kompilace a dosahuje se plné rychlosti od samého začátku.

Postupem času jsme zaznamenali více synergií mezi týmem GraalVM a skupinou Oracle Java Engineering Group. Oracle JDK dokonce zahrnoval kompilátor Graal JIT z JDK 23.

Je GraalVM stále dostupný pro Javu?

Nedávná oznámení od společnosti Oracle však ukázala, že tímto směrem se již nebudou ubírat jako vysoce výkonné řešení v Javě. Od verze JDK 25 byl kompilátor Graal JIT z Oracle JDK odstraněn (nikdy nebyl součástí OpenJDK, takže jej ostatní distribuce neobsahují).

Ještě důležitější je, že Oracle oznámil, že „ odpojuje GraalVM od ekosystému Java “.

Podrobnosti uvedené v blogovém příspěvku to dále vysvětlují:

  • Týmy GraalVM přecházejí na zaměření na ne-Java jazyky Graal, včetně GraalPy a GraalJS.
  • GraalVM pro JDK 24 byla poslední verzí GraalVM licencovanou a podporovanou jako součást produktů Oracle Java SE.
  • Oracle JDK 24 byla poslední verzí, která obsahovala experimentální a volitelný Graal JIT.
  • Technologie GraalVM Early Adopter, včetně Native Image, se pro zákazníky produktů Java SE ukončuje.

Rada společnosti Oracle zní: „Uživatelům GraalVM, kteří se zajímají o technologii Java, se doporučuje přejít na verze Oracle JDK nebo Oracle OpenJDK .“ V podstatě to znamená návrat k používání sestavení OpenJDK.

Kam se nyní můžete obrátit ohledně výkonu Javy?

Co když potřebujete pro své Java aplikace lepší výkon, včetně nižší latence, vyšší propustnosti a také kratší doby zahřívání? Vzhledem k tomu, že Oracle opouští prostor vysoce výkonných platforem Java, trh se nyní dělí na dva odlišné tábory: standardní distribuce OpenJDK (Oracle Java SE, Amazon Corretto, Azul Platform Core) a vysoce výkonné platformy Java.

GRAF: Porovnání výkonu Javy
Obrázek 1: Srovnávací tabulka výkonu v Javě mezi OpenJDK, GraalVM a Azul Platform Prime.

Pro výše uvedenou matici použijte tuto legendu:

  • Černý typ: Černé hodnoty označují, do jaké míry je distribuce lepší než OpenJDK.
    Například čtvrtinové vyplnění znamená mírně lepší, zatímco napůl vyplnění znamená mírně lepší
    atd.
  • Šedý typ: Šedé hodnoty označují, že distribuce je z komerčně podporovaného
    hlediska na konci životnosti.

Naštěstí má Azul řešení v podobě vysoce výkonné platformy Java Platform Prime [obrázek 1]. Platform Prime nabízí nižší latenci díky garbage collectoru C4 a vyšší propustnost díky optimalizovanějšímu kódu generovanému kompilátorem Falcon JIT. Nabízí také řadu řešení pro lepší zahřívání: profily ReadyNow, které říkají JVM, co má okamžitě kompilovat, Cloud Native Compiler pro přesměrování JIT na centralizovanou službu a dokonce i CRaC pro okamžité restartování aplikace z předem uloženého stavu.

Pokud hledáte pro své Java aplikace vysoký výkon, proč to nezkusit? Samozřejmě byste si měli udělat průzkum. Přečtěte si nového průvodce porovnáním vysoce výkonných platforem Java, kde se dozvíte více o svých možnostech.