HotSpot zwiastuje nową erę Javy?

Programiści liczą, że maszyna wirtualna Suna zwiększy wydajność Javy.

Programiści liczą, że maszyna wirtualna Suna zwiększy wydajność Javy.

Prawdopodobnie nowa wirtualna maszyna Sun Java HotSpot nie pojawi się wcześniej niż na początku 1999 r. W przemyśle informatycznym wiązano duże nadzieje z nową maszyną zawierającą optymalizator adaptacyjny. Liczono na bardziej efektywny model wykorzystania pamięci i usprawniony mechanizm usuwania obiektów i klas (garbage collection). Sun Microsystems nie dostarczył do testów InfoWorld nawet roboczej wersji maszyny HotSpot.

Optymalizator adaptacyjny

Unikatową i potencjalnie bardzo cenną cechą maszyny HotSpot jest możliwość wykrywania w kodzie bajtowym Java tych części kodu, które są wykonywane wielokrotnie ("gorące punkty" - hot spots) oraz kompilowania, optymalizowania (i ewentualnie deoptymalizowania ich) podczas wykonywania programu.

W przeciwieństwie do kompilatorów na bieżąco (JIT) lub do kodu maszynowego, HotSpot kompiluje kod bajtowy dopiero wtedy, gdy uzyska dostatecznie wiele informacji o warunkach wykonywania programu. HotSpot kompiluje te "gorące punkty" programu do kodu maszynowego, korzysta ze wstawiania w kod bajtowy kodu maszynowego (inlining) w celu zmniejszenia narzutu wywołania często używanych metod (procedur według terminologii języków proceduralnych). Ponieważ maszyna HotSpot gromadzi dane na temat warunków wykonania przez cały czas pracy programu, może okazać się, że usunie pewne części kodu maszynowego i przywróci kod bajtowy (wstawianie kodu maszynowego zwiększa ponad 10-krotnie rozmiar programu), zmieni klasyfikację "gorących punktów" lub doda nowe, w miarę ładowania nowych klas.

Nowy model pamięciowy

Język programowania alokuje miejsce dla wszystkich obiektów na stercie (heap) pamięci (sterta to część pamięci przyznanej maszynie wirtualnej przez system, w której umieszcza się obiekty nietrwałe, dynamicznie zmienne). Efektywne używanie tej pamięci ma zasadnicze znaczenie dla wydajności maszyny wirtualnej. W celu zmniejszenia rozmiarów zajmowanej sterty Sun zmodyfikował nagłówki obiektów,wyeliminował uchwyty (handle) do obiektów i zapewnił bezpośredni dostęp do nich przez wątki.

W przeciwieństwie do innych implementacji maszyn wirtualnych, stosujących nagłówek do obiektu o długości trzech słów maszynowych, HotSpot korzysta z nagłówka o długości dwóch słów, w którym pierwsze słowo to wskaźnik do obiektu, drugie zaś dotyczy właściwości obiektu. Ta zmiana pozwoliła zaoszczędzić 8% rozmiarów sterty.

Zamiast sięgać do obiektów za pomocą uchwytu, jak czynią to inne maszyny wirtualne, HotSpot posługuje się bezpośrednim wskaźnikiem do obiektu. Pozwala to nie tylko uniknąć czasochłonnej obsługi uchwytów, lecz również upraszcza obsługę obiektów.

Usuwanie obiektów i klas z pamięci

Automatyczne usuwanie obiektów i klas z pamięci (automatyczne zarządzanie pamięcią) jest jedną z wyróżniających cech języka Java. Może ono jednak powodować zakłócenia działania programów, ponieważ konkuruje z aplikacją o cykle maszynowe procesora. Z punktu widzenia użytkownika proces usuwania obiektów i konsolidowania wolnej przestrzeni pamięci ujawnia się jako czasowe zatrzymanie działania aplikacji, czasem nawet na kilkanaście sekund. Aby zapobiec temu zjawisku, HotSpot wprowadza pojęcie "generacji" lub "wieku" obiektów. HotSpot łączy obiekty - zależnie od ich wieku - w struktury typu stos (stack), z którego można je usuwać znacznie efektywniej niż ze sterty wymagającej przeglądania obszaru pamięci. Ponadto zamiast eliminować obiekty z całej sterty naraz, można proces podzielić na części i usuwać jednocześnie tylko jedną generację obiektów.

<hr size=1 noshade>Na podstawie materiałów zamieszczonych w tygodniku InfoWorld, wydawanym przez IDG, opr. Marian Łakomy.

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

TOP 200