Oracle GraalVM

Usługa ta jest dostępna z subskrypcją Java SE Universal bez żadnych dodatkowych kosztów i wspomaga rozwój nowoczesnych aplikacji Java poprzez oparte na mikrousługach aplikacje dla natywnych wdrożeń w chmurze przy większej wydajności i oszczędnościach.

Czym jest Oracle GraalVM?

Definicja GraalVM

Oracle GraalVM to wysokowydajny zestaw JDK, który może przyspieszyć działanie aplikacji opartych na technologii Java i JVM za pomocą alternatywnego kompilatora JIT (just-in-time, „na czas”). Zmniejsza opóźnienia aplikacji, zwiększa przepustowość szczytową poprzez skracanie czasu usuwania pozostałości i posiada asystę techniczną 24/7 Oracle.

Istnieje również natywne narzędzie do tworzenia obrazów, które kompiluje kod bajtowy Java z wyprzedzeniem (AOT) i generuje natywne pliki wykonywalne dla niektórych aplikacji, które uruchamiają się niemal natychmiast i używają bardzo mało zasobów pamięci.

GraalVM (kompilator Graal, Truffle i Oracle Java Development Kit [JDK])

GraalVM zaistniał w 2011 roku jako projekt badawczy Oracle Labs w celu stworzenia platformy wykonawczej, która mogła z wysoką wydajnością uruchamiać różne języki programowania. Podstawą projektu GraalVM jest zaawansowana optymalizacja kompilatora GraalVM, który jest używany jako kompilator JIT dla Java Virtual Machine (JVM) lub przez natywną funkcję tworzenia obrazu GraalVM do kompilowania kodów bajtowych Java z wyprzedzeniem w natywnym kodzie maszynowym. Struktura implementacji języka Truffle w GraalVM współpracuje z kompilatorem GraalVM w celu uruchomienia kodu JavaScript, Python, Ruby i innych obsługiwanych języków w JVM z wyjątkową wydajnością.

JVM używająca GraalVM w trybie JIT korzysta z kompilatora GraalVM JI do tworzenia kodu maszynowego specyficznego dla platformy z kodu bajtowego Java podczas działania aplikacji. Kompilacja jest wykonywana przyrostowo podczas wykonywania programu z dodatkową optymalizacją zastosowaną wobec często wykonywanego kodu. Takie podejście zapewnia, że kod w aktywnych punktach działa niezwykle szybko dzięki agresywnemu wstawianiu, częściowej analizie wskaźników i innych sposobach na zaawansowaną optymalizację. Niektóre optymalizacje zmniejszają alokacje obiektów, co zmniejsza obciążenie odzyskiwania pamięci. Pomaga to zwiększyć szczytową wydajność długo działających aplikacji.

Natywne narzędzie do tworzenia obrazów GraalVM może także skompilować kod bajtowy Java, generując z wyprzedzeniem (tj. w czasie kompilacji) natywne pliki wykonywalne maszyny. Te pliki wykonywalne uruchamiają się niemal natychmiast i zużywają jedynie ułamek pamięci wykorzystywanej przez tę samą aplikację Java działającą w JVM. Natywne pliki wykonywalne mają również małe rozmiary, ponieważ zawierają jedynie klasy, metody i zależne biblioteki wymagane przez aplikację.

GraalVM wspiera także wielojęzyczną interoperacyjność poprzez strukturę implementacji języka Truffle. Truffle umożliwia programom napisanym w obsługiwanych językach korzystanie z wielojęzycznych bibliotek. Przykładowo – program JavaScript może wywołać metody Ruby i udostępnić wartości bez tworzenia kopii. Truffle w środowisku JVM współdziała z kompilatorem GraalVM w celu skompilowania obsługiwanych języków w natywnym kodzie maszynowym, by zapewnić optymalną wydajność, tak jak Java.

Dowiedz się więcej o kompilatorze GraalVM, przeczytaj e-booka „GraalVM dla opornych”

Oracle GraalVM

Kompilator GraalVM zawiera kilka dodatkowych algorytmów optymalizacji, które zapewniają znaczną poprawę wydajności i wykorzystania zasobów. Natywne funkcje obrazu GraalVM obsługują wiele zaawansowanych funkcji, takich jak odzyskiwanie pamięci G1, skompresowane wskaźniki i optymalizację sterowaną profilem, co pomaga kompilatorowi generować bardziej wydajny kod.

Usługa GraalVM jest zawarta w produktach Java SE bez żadnych dodatkowych kosztów. Obejmuje asystę techniczną 24/7 firmy Oracle, z dostępem do poprawek zabezpieczeń i aktualizacji krytycznych ścieżek, zapewniających bardziej przewidywalną wydajność i niezawodność. Przy migracji aplikacji Java do chmury usługa GraalVM jest bezpłatna w ramach Oracle Cloud Infrastructure (OCI).

Dlaczego warto używać Oracle GraalVM

GraalVM pozwala programistom tworzyć wydajniejszy kod zapewniający lepszą izolację i większą elastyczność w środowiskach chmurowych lub hybrydowych. Oto kilka powodów, dla których coraz więcej firm używa GraalVM:

  • Szybkie przystosowanie się do zmieniającego się rynku. W dzisiejszych czasach aplikacje biznesowe muszą przetwarzać rosnące ilości danych i szybko reagować na żądania klientów. Aplikacje Java mogą się rozwijać tak, aby nadążać za tempem, pomagając programistom zwiększyć wydajność aplikacji przy jednoczesnym zmniejszaniu kosztów informatycznych.
  • Możliwość tworzenia nowoczesnych aplikacji Java, korzystających z mikrousług i kontenerów dla natywnych rozwiązań chmurowych. Mikrousługi to małe, niezależne miniaplikacje, które mają jedną funkcję. Aplikacje biznesowe zazwyczaj korzystają z setek usług, które muszą szybko się uruchamiać, by minimalizować opóźnienia i zmniejszać koszty korzystania z chmury. Innymi słowy, można płacić tylko za to, co jest używane.
  • Zwiększenie produktywności programistów dzięki stworzeniu ekosystemu, w którym różne języki programowania mogą współpracować w jednej maszynie JVM.

Przykłady zastosowań GraalVM

Zwiększanie wydajności i rozszerzanie istniejących aplikacji Java

Innowacje GraalVM pomagają kodowi Java nadążać za współczesnymi wymaganiami obliczeniowymi, zapewniając szybsze działanie i reakcję na potrzeby klientów. Zaawansowany optymalizator zwiększa przepustowość szczytową. Optymalizuje także zużycie pamięci, minimalizując alokacje obiektów, skracając czas poświęcany na odzyskiwanie pamięci. GraalVM w trybie JIT może zwiększyć wydajność do 50%. Prowadzi to do szybszego zwalniania pamięci, umożliwiając wykonywanie innych zadań przetwarzania w tej samej infrastrukturze i zmniejszając koszty informatyczne.

Tworzenie natywnych aplikacji chmurowych

Natywne narzędzie do tworzenia obrazów wbudowane w Oracle GraalVM z wyprzedzeniem kompiluje kod bajtowy aplikacji Java do binarnych plików maszynowych. Natywne pliki wykonywalne uruchamiają się prawie 100 razy szybciej i zużywają do 5 razy mniej pamięci w porównaniu z uruchamianiem aplikacji w JVM.

Natywne GraalVM Enterprise
Ilustracja 1 – Natywne pliki wykonywalne uruchamiają się niemal natychmiast i zużywają bardzo mało pamięci w porównaniu z Go lub Java HotSpot.

GraalVM może przyczynić się do ograniczenia kosztów operacyjnych, biorąc pod uwagę przenoszenie zadań przetwarzania do chmury przez organizacje i płacenie według taryf godzinowych za wykorzystanie zasobów. Te wyniki sprawiają, że natywne pliki wykonywalne generowane przez GraalVM doskonale nadają się do wdrażania mikrousług, które są obsługiwane przez popularne struktury mikrousług, takie jak Helidon, Micronaut, Quarkus i Spring Boot.

Tworzenie wielojęzycznych programów i zwiększenie wydajności

W JVM można uruchamiać z doskonałą wydajnością aplikacje Java i inne języki, takie jak JavaScript. Oracle NetSuite SuiteScript to język rozszerzeń dla użytkowników końcowych, umożliwiający dostosowywanie aplikacji działających w NetSuite. Oracle GraalVM pozwala NetSuite na osadzenie środowiska wykonawczego JavaScript opartego na Truffle, które może skompilować kod JavaScript do kodu maszynowego działającego 4 razy szybciej niż SuiteScript w środowisku JVM.

Jak poprawić wydajność i efektywność aplikacji

GraalVM zawiera zaawansowany kompilator optymalizacji, który generuje kod maszynowy podczas uruchamiania programu w trybie JIT w celu przyspieszenia działania aplikacji Java. Kompilując z wyprzedzeniem obraz natywny uruchamia się szybko i zużywa mniej pamięci, co czyni go idealnym rozwiązaniem dla natywnych wdrożeń w chmurze. Obsługuje programy wielojęzyczne w celu zwiększenia produktywności, umożliwiając programistom korzystanie z najlepszych bibliotek niezbędnych do rozwiązywania problemów biznesowych – niezależnie od języka, w którym zostały napisane.