Nowa maszyna na stół

Maszyna po remoncie

Poza zmianami w składni języka, J2SE 1.5 wprowadza wiele zmian w funkcjonowaniu środowiska wykonawczego. JVM w JDK 1.5 ma być maszyną samoadaptującą się do zmiennych potrzeb przetwarzania. Można określić cel optymalizacji, a maszyna sama dobierze wielkość sterty, elementy prekompilowane itp. Przyspieszono wczytywanie klas dzięki wspólnemu plikowi z archiwum systemowych plików JAR. W ten sposób są one współdzielone pomiędzy instancjami i zamiast z dysku pobierane z pamięci. Sun zamierza udostępnić taką funkcjonalność także dla klas użytkowych.

W mechanizmie zarządzającym pamięcią pojawił się mechanizm równoległego odśmiecania, co może zwiększyć wydajność w środowiskach wieloprocesorowych bez konieczności stosowania "magicznych" przełączników przy uruchamianiu czy kompilacji.

Zmienił się sposób mapowania wątków Java na wątki systemowe. Dotychczas istniały trzy poziomy priorytetów: minimalny (1), normalny (2-4) i maksymalny (5-10). W J2SE 1.5 wątki JVM z priorytetem normalnym konkurują na równi z wątkami systemowymi, dla których priorytet nie został ustalony. Wątki JVM z priorytetami 5-10 są wobec siebie równe i są mapowane na najwyższe dostępne dla nich priorytety systemowe.

Trzeba zaznaczyć, że mapowanie wątków w maszynie wirtualnej Sun Microsystems wygląda inaczej niż w implementacjach BEA, IBM i innych. Większość dostawców odchodzi od mapowania wątków Java na wątki systemowe, skłaniając się ku uruchamianiu wszystkich wątków Java w jednym procesie systemowym. Każdy system zarządza wątkami w specyficzny sposób, dlatego ingerowanie w priorytety może łatwo prowadzić do ograniczenia wydajności lub przenośności JVM.

Zdalnie i bezpiecznie

Wprowadzono zmiany w funkcjach komunikacyjnych, m.in. pełne wsparcie dla IPv6, możliwość ustalania limitów czasu oczekiwania na reakcję na żądania połączenia lub odczytu (także dla protokołów SSL/TLS). Dzięki nowemu zestawowi interfejsów API aplikacje (w tym aplikacje RMI) mogą być wywoływane poprzez funkcję inetd. Poprawiono obsługę serwerów proxy oraz umożliwiono aplikacjom dostęp do systemowych (lub innych) mechanizmów buforowania plików i ścieżek URL.

Wśród nowych funkcji związanych z bezpieczeństwem jest uniezależnienie obsługi SSL/TLS od warstwy I/O. Dzięki temu podsystem szyfrowania komunikacji może równolegle realizować różne scenariusze operacji wejścia-wyjścia - z blokowaniem, bez blokowania, synchroniczne, asynchroniczne i inne, a nie tylko proste szyfrowanie strumieni danych, jak dotychczas. Pojawiło się także wsparcie dla mechanizmów szyfrujących Kerberos (algorytmy DES, 3DES i RC4) oraz pełne wsparcie dla szyfrowania z algorytmem AES z kluczem 256-bitowym.

Jeśli chodzi o architekturę PKI, w J2SE 1.5 pojawiło się bezpośrednie wsparcie dla list CLR oraz mechanizmów automatycznego sprawdzania ważności certyfikatów (OSCP). Wprowadzono obsługę standardu PKCS#11 (m.in. bezpośrednie odwołania do szyfratorów sprzętowych, w tym kart mikroprocesorowych) oraz poprawiono implementację PKCS#12 (przechowywanie i transport kluczy).

Aplikacje na podglądzie

W Javie brakowało standardu, który określi, jak ma być profilowany i monitorowany program - każdy producent maszyny wirtualnej realizował to w inny sposób. W JDK 1.5 pojawia się specjalny zestaw interfejsów API (zgodnie z JSR-174, JSR-163), pozwalających na zdalne monitorowanie aplikacji za pośrednictwem interfejsu JMX lub SNMP. Można rejestrować procesy nadsłuchujące i np. wykrywać brak pamięci itp. Równocześnie pojawiły się mechanizmy pozwalające analizować czas wykonania dowolnych składowych w Javie (profilowanie) - aż do poziomu poszczególnych instrukcji bajtkodu.

Nowości J2SE 1.5 Beta 1

Pakiet JDK

  • Typy ogólne (generic types)

  • Automatyczna konwersja typów prostych do obiektowych, odwrotnie

  • Wysokopoziomowe interfejsy API dla wielowątkowości

  • Statyczny import wartości stałych z innych klas

  • Obsługa metadanych w języku Java

  • Łatwe iterowanie wartości z tablicy lub kolekcji

  • Dynamiczne generowanie klas pośrednich dla RMI
Maszyna wirtualna

  • Samooptymalizacja wg zadanych celów (wydajność, użycie zasobów)

  • Współdzielenie klas między instancjami JVM

  • Równoległe odśmiecanie pamięci

  • Ulepszona obsługa RMI

  • Ulepszone mechanizmy monitorowania i profilowania aplikacji

  • Ulepszona obsługa kryptografii i PKI

TOP 200