Turbo dla Javy

HotSpot - maszyna wirtualna Javy - najlepiej sprawdza się w bazach danych Java, serwerach aplikacyjnych Java i w powtarzających się częściach aplikacji, które wykonują się na serwerze.

HotSpot - maszyna wirtualna Javy - najlepiej sprawdza się w bazach danych Java, serwerach aplikacyjnych Java i w powtarzających się częściach aplikacji, które wykonują się na serwerze.

Sun Microsystems twierdzi, że wprowadzona prawie przed dwoma miesiącami maszyna wirtualna HotSpot spowoduje, iż inne rozwiązania przyspieszające wykonywanie kodu bajtowego Java, a w szczególności kompilatory na bieżąco JiT (Just-in-Time), będą należały do przeszłości. HotSpot przyspiesza wykonywanie niektórych aplikacji nawet dwukrotnie w porównaniu z najlepszymi realizacjami maszyn wirtualnych, zgodnych z Java 2.

Gorące punkty

Standardowe kompilatory na bieżąco dokonują translacji kodu bajtowego Java na kod maszynowy w miarę wykonywania kolejnych części programu. Wywołanie funkcji lub procedury już skompilowanej dokonuje się na poziomie kodu maszynowego. Jednak proces tłumaczenia jest czasochłonny i nieopłacalny w przypadku procedur, które w programie będą wykonane kilka razy lub tylko raz.

HotSpot stanowi rozwiązanie tego problemu, zwłaszcza jeśli chodzi o większość aplikacji działających na serwerze. Nazwa HotSpot ma ścisły związek z działaniem maszyny. "Gorące punkty" programu (hot spots) to te miejsca, które są wykonywane najczęściej. Przyspieszenie ich wykonania ma więc największy wpływ na czas działania programu. Maszyna HotSpot identyfikuje "gorące punkty" w trakcie tzw. profilowania aplikacji. Zebrane dane statystyczne pozwalają maszynie na określenie, które miejsca programu należy koniecznie przekształcić do kodu maszynowego, dostosowując działanie maszyny do konkretnej aplikacji. Ten adaptacyjny proces kompilacji daje największe korzyści w aplikacjach, w których te same zadania wykonują się wielokrotnie, np. w aplikacjach bazodanowych.

Usuwanie śmieci i wielowątkowość

Sun ocenia, że prawie 40% zasobów systemowych przeznaczono na obsługę wątków programów oraz usuwanie z pamięci zbędnych już obiektów i defragmentację pamięci - przetwarzanie jej struktury do jednego ciągłego obszaru.

Typowy proces usuwania śmieci - realizowany gdy zaczyna brakować zasobów - polega na przerwaniu wykonywania aplikacji, przejrzeniu wszystkich struktur (obiektów, komponentów, stosu, sterty) pamięciowych, wskazaniu, które są zbędne, usunięciu ich i wykonaniu defragmentacji pamięci. Ponieważ taki proces, nawet na szybkim komputerze, może trwać kilka sekund, jest trudno akceptowalny w wymagających zastosowaniach.

W maszynie HotSpot proces usprawniono na kilka sposobów:

- skrócono maksymalny czas usuwania śmieci, dzieląc go na wiele odcinków nie dłuższych niż 10 ms

- zmieniono algorytm wykrywania, które obiekty wymagają usunięcia z pamięci, dzieląc je na "grupy wiekowe"

- defragmentacji pamięci dokonuje się tylko w ramach poszczególnych grup wiekowych obiektów, nie w całym systemie.

Sun twierdzi również, że na tyle usprawniono proces synchronizacji wątków (zajmujący w innych realizacjach maszyn wirtualnych ok. 20% czasu maszynowego), iż "nie ma on wpływu na wydajność większości rzeczywistych aplikacji".

Porównania szybkości

Nie ma na razie standardowych i powszechnie aprobowanych metod testowania wydajności maszyn wirtualnych Java. Większość producentów posługuje się benchmarkiem SPECjvm98 (wstępna wersja opracowana przez konsorcjum Standard Performance Evaluation Corp.) lub tzw. VolanoMark, produktem firmy Volano.

Sun podaje, że na komputerze z Windows NT i Pentium 450 MHz maszyna HotSpot osiągnęła wydajność 31,1 w SPECjvm98, co oznacza wzrost o 90% w stosunku do maszyny zgodnej z Java 2, wyposażonej w JIT firmy Symantec.

VolanoMark testuje wydajność maszyny liczoną w liczbie wysłanych komunikatów w jednostce czasu, zależnie od liczby połączeń. Na Windows NT z Pentium 450 MHz wydajność HotSpot spada z ok. 1500 str./s do 750 str./s przy wzroście liczby połączeń z 300 do 2100; w klasycznej maszynie wydajność ta wynosi ok. 400 str./s.

Natomiast HotSpot, pracująca na komputerach Sun SPARC z systemem Solaris, osiąga imponującą wydajność - ponad 5000 str./s - niezależnie od liczby połączeń.

Dla kogo HotSpot?

Jak wskazuje doświadczenie użytkowników maszyny wirtualnej HotSpot, największe zyski osiąga się w bazach danych Java, serwerach aplikacyjnych Java i w powtarzających się częściach aplikacji, które wykonują się na serwerze. Wszystkie intensywne obliczeniowo operacje wymagają wielokrotnego powtarzania niewielkich części kodu, zyskują więc sporo na wydajności dzięki zastosowaniu maszyny HotSpot.

Natomiast większość operacji graficznych - wykonywanych na ogół na stacjach klienta - wymaga częstego odwoływania się do rodzimych dla danego systemu, dokładnie optymalizowanych bibliotek graficznych. Ponadto są one wykonywane poza maszyną wirtualną Java, HotSpot nie ma więc tu wpływu na wydajność aplikacji.

Maszyna wirtualna Java jest już dostępna bezpłatnie w sieci Suna w wersjach dla Windows i Solaris.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200