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 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”
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).
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:
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 chmurowychNatywne 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.
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ściW 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.
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.