Maszyna wirtualna HotSpot

Szybkość programów Java uruchamianych za pomocą nowej maszyny wirtualnej Suna HotSpot jest lepsza niż programów kompilowanych C++.

Szybkość programów Java uruchamianych za pomocą nowej maszyny wirtualnej Suna HotSpot jest lepsza niż programów kompilowanych C++.

Nowa maszyna wirtualna Java, opracowywana przez firmę Sun (i już dostępna dla wybranych beta testerów), mająca pojawić się na rynku jeszcze w pierwszej połowie br., będzie oferować szybsze wykonywanie programu skompilowanego do kodu bajtowego Java niż do kodu maszynowego. Na pierwszy rzut oka wydaje się to niemożliwe, ale umiejętne połączenie technologii, opracowanych na uczelniach w ostatnich 10 latach, daje takie wyniki.

Kod bajtowy Java uruchamiany za pomocą maszyny wirtualnej Java (JVM) działa setki razy wolniej od spełniającego te same funkcje kodu maszynowego, uzyskanego z kompilatora. Wydajność maszyny wirtualnej Java może więc być do zaakceptowania w przypadku małych apletów, ale nie dużych aplikacji. Z tego powodu wszystkie współczesne JVM są wyposażone w kompilatory na bieżąco (Just-in-Time - JIT). Mimo pewnych możliwości optymalizacji kodu, nie radzą sobie one zbyt dobrze z programami graficznymi lub intensywnymi obliczeniowo.

Maszyna wirtualna HotSpot zawiera technologię tzw. dynamicznej kompilacji, opracowaną na uniwersytetach w Stanford (warto przypomnieć, że skrót SUN oznaczał kiedyś Stanford University Network) i Santa Barbara. Wydajność niektórych programów Java uruchamianych za pomocą maszyny HotSpot przekracza wydajność równoważnych programów kompilowanych z C++.

Co kosztuje najwięcej?

Pewne cechy języka Java - bardzo wygodne z punktu widzenia programisty, takie jak automatyczne usuwanie z pamięci obiektów już nie używanych (tzw. garbage collection) czy wielowątkowość - powodują jednak konieczność poświęcenia znacznego procentu mocy obliczeniowej procesora na ich realizację. Jak wskazują szczegółowe badania profilowe programów Java, interpretacja kodu bajtowego wymaga ok. 60% czasu pracy maszyny wirtualnej, usuwanie obiektów nie używanych - 20% czasu, synchronizacja wątków - mniej niż 19%. Automatyczne usuwanie z pamięci obiektów nie używanych wykonywane jest co jakiś czas i wymaga sprawdzenia całej zawartości pamięci i skonsolidowania wolnych miejsc w duże, wolne obszary. Powoduje to jednak niemiłe dla użytkownika zjawisko zatrzymania działania aplikacji nawet na kilkanaście sekund. Aby uniknąć tych efektów, w HotSpot zastosowano podział obiektów według ich "wieku" lub "generacji" i usuwanie ich partiami. Operacja nie czyści wprawdzie całej pamięci, ale trwa znacznie krócej.

Synchronizacja wątków (części kodu, które mogą być wykonywane jednocześnie) również wymaga wiele czasu i nie może być zoptymalizowana podczas kompilacji. Również tę operację wykonuje się w HotSpot znacznie sprawniej.

Dynamiczna kompilacja

HotSpot zawiera wirtualną maszynę Java, kompilator, moduł profilujący i decyzyjny. Gdy kod bajtowy wchodzi w proces wykonywania, jest interpretowany przez maszynę wirtualną. Moduł profilujący zapamiętuje ile czasu trwa każda metoda. Jeżeli trwa długo, jest ona na bieżąco kompilowana do kodu maszynowego i każde następne wywołanie metody dotyczy już kodu maszynowego.

Podobnie jak w przypadku kompilatorów JIT, kod maszynowy jest dostępny tylko wtedy, gdy dany program jest uruchamiany - nie przechowuje się go do użycia w przyszłości. Zapewnia to istotną dla Javy przenośność programów na dowolne platformy i stwarza możliwość optymalizacji kodu zależną od aktualnych warunków wykonywania.

HotSpot kompiluje tylko te części kodu bajtowego, które przyniosą oszczędności w wykonaniu: jeśli czas kompilowania będzie dłuższy niż czas wykonania, nie warto dokonywać operacji, zwłaszcza jeśli metoda ma być przeprowadzona niewielką liczbę razy.

Umiejętne korzystanie z danych dostępnych tylko podczas wykonywania programu umożliwia modułowi decyzyjnemu optymalne określenie, które części kodu należy kompilować, które zaś interpretować.

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

TOP 200