Java w nowym stylu

Doświadczeni programiści wiedzą, jak w aplikacjach Javy osiągać wydajność zbliżoną do tej, jaką mają aplikacje kompilowane do kodu maszynowego. Dzięki Java 2 umiejętność ta stanie się dostępna dla znacznie większego grona osób tworzących aplikacje.

Doświadczeni programiści wiedzą, jak w aplikacjach Javy osiągać wydajność zbliżoną do tej, jaką mają aplikacje kompilowane do kodu maszynowego. Dzięki Java 2 umiejętność ta stanie się dostępna dla znacznie większego grona osób tworzących aplikacje.

Dotychczas w Javie nie było ogólnie dostępnych narzędzi, pozwalających skutecznie rozwiązywać problemy dotyczące wydajności. Osiągnięcie dużej szybkości działania aplikacji wymagało od programisty przejścia intensywnych szkoleń, praktyki i cierpliwości - próbowania różnych technik, profilowania wydajności każdej metody, omijania pułapek sieciowych i systemowych, umiejętnego stosowania metod wielowątkowych, wykorzystywania szczególnych cech kompilatora nadążnego (just-in-time).

Wszystko zmieniło się wraz z pojawieniem się platformy Java 2. Korzystając z Java Development Kit 2, programiści uzyskują znacznie wydajniejsze aplikacje przez przeniesienie ich na nową platformę i uruchomienie w nowym środowisku Java Run-Time Environment (JRE).

Przyspieszenie na wszystkich frontach

Sun Microsystems zoptymalizował wydajność każdego elementu składowego platformy Java. Największy wpływ na wydajność miały działania w zakresie szybszej alokacji pamięci i usuwania nie używanych obiektów (garbage collection), obsługi wielowątkowości i wsparcia systemów wieloprocesorowych, synchronizacji metod, szybszego ładowania klas w nowym formacie. Do poprawienia wydajności konieczne było też wprowadzenie nowych bibliotek funkcji systemowych (w kodzie maszynowym komputera) dostępnych za pośrednictwem interfejsu Java Native Interface (JNI), kompilatora nadążnego i zoptymalizowanie wszystkich bibliotek klas (ogółem 15), stanowiących jądro platformy Java 2.

Ułatwieniem dla programistów piszących szybkie aplikacje będą interfejsy do debuggera (Java Virtual Machine Debugger Interface - JVMDI) i programów profilujących (testujących szybkość) metody (Java Virtual Machine Profiler Interface - JVMPI). Sun przewiduje, że niezależni dostawcy szybko opracują programy uzupełniające w tym zakresie właściwości funkcjonalne zestawów programistycznych.

Pamięć jest cenna

W dużych aplikacjach dla przedsiębiorstwa system posługuje się setkami tysięcy obiektów, które trzeba uruchomić i usunąć z pamięci, gdy nie są już potrzebne. Programista w C++ musi te czynności wykonywać sam, a każdy błąd może spowodować znaczne spowolnienie działania lub zawieszenie się programu. Automatyczne zbieranie i usuwanie z pamięci nie używanych obiektów i zwracanie tej przestrzeni do puli wolnej pamięci jest największą zaletą Javy.

W nowej wersji Java 2 wprawdzie nadal zatrzymuje się działanie programu na czas zbierania i usuwania obiektów, ale operację tę znacznie przyspieszono. Sun opracowuje nową, rewolucyjną metodę wykonywania tej operacji i zapowiada zintegrowanie jej z nową, wysoko wydajną maszyną wirtualną HotSpot, która ma być dostępna w II kwartale 1999 r.

Skalowalność

Większa wydajność nie oznacza automatycznie lepszej skalowalności aplikacji, tj. zachowania czasu odpowiedzi przy rosnącej liczbie użytkowników oraz prostej możliwości zwiększenia wydajności przez przeniesienie aplikacji na system wieloprocesorowy. Do tego celu konieczne jest solidne wsparcie metod wielowątkowych i systemów z wieloma procesorami, a także dobry system synchronizacji metod i wątków.

Większość współczesnych aplikacji klient/serwer ma charakter wielowątkowy, gdyż jedynie takie rozwiązania zapewniają osiąganie dobrej skalowalności. Serwery coraz częściej są wieloprocesorowe, a systemy operacyjne pozwalają na uruchamianie wielu wątków na wszystkich dostępnych procesorach.

Programiści skarżą się jednak, że metody obsługi wielowątkowości w systemach operacyjnych i językach programowania są niedostateczne, czasem prymitywne. Gdy więcej niż jeden wątek ma dostęp do tych samych struktur danych, należy zapewnić synchronizację ich działania - nie może jeden wątek zmieniać struktury w czasie, gdy inny pobiera z niej dane. Mechanizm ten jest dokładnym odpowiednikiem blokowania poszczególnych rekordów w relacyjnych systemach zarządzania bazami danych. W bazach danych ten problem rozwiązano niedawno, nie dziwi więc, że nie znalazł on satysfakcjonującego rozwiązania w aplikacjach obiektowych.

Java 2 ma wbudowane mechanizmy synchronizacji metod i wątków. Beta testerzy nowej wersji stwierdzają również znacznie lepsze wykorzystanie mocy obliczeniowej wielu procesorów systemu.

Inne mechanizmy

Osiąganiu lepszej wydajności aplikacji Java pomagają również m.in. nowy kompilator nadążny, nowe sterowniki JDBC 2, zmieniona metoda kompresji klas i ładowania ich w tej postaci do pamięci, nowe optymalizowane komponenty środowiska zgrupowane w bibliotece Java Foundation Class, nowa biblioteka CORBA do współpracy z aplikacjami rozproszonymi, zgodnymi z tą specyfikacją.

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

TOP 200