Jest to naprawdę powiązane z HotSpot i domyślnymi wartościami opcji ( Opcje VM HotSpot VM ), które różnią się w zależności od konfiguracji klienta i serwera.
Z rozdziału 2 oficjalnego dokumentu ( Architektura silnika Java HotSpot Performance Engine ):
JDK obejmuje dwa warianty maszyny wirtualnej - ofertę dla klienta i maszynę wirtualną dostosowaną do aplikacji serwerowych. Te dwa rozwiązania współużytkują bazę kodu środowiska wykonawczego Java HotSpot, ale używają różnych kompilatorów, które są dostosowane do wyraźnie unikalnej charakterystyki wydajności klientów i serwerów. Różnice te obejmują zasady wstawiania kompilacji i wartości domyślne sterty.
Chociaż maszyny wirtualne serwera i klienta są podobne, maszyna wirtualna serwera została specjalnie dostrojona, aby zmaksymalizować maksymalną prędkość roboczą. Jest przeznaczony do uruchamiania długo działających aplikacji serwerowych, które wymagają najszybszej możliwej prędkości działania większej niż szybki czas uruchamiania lub mniejszy ślad pamięci wykonawczej.
Kompilator maszyn wirtualnych klienta służy jako uaktualnienie zarówno klasycznej maszyny wirtualnej, jak i kompilatorów just-in-time (JIT) używanych we wcześniejszych wersjach JDK. Klient maszyn wirtualnych oferuje lepszą wydajność w czasie wykonywania aplikacji i apletów. Wirtualna klient Java HotSpot została specjalnie dostrojona, aby skrócić czas uruchamiania aplikacji i zajmować mało pamięci, dzięki czemu jest szczególnie odpowiedni dla środowisk klienckich. Ogólnie rzecz biorąc, system klienta jest lepszy dla GUI.
Tak więc prawdziwa różnica występuje również na poziomie kompilatora:
Kompilator VM maszyny klienckiej nie próbuje wykonać wielu bardziej złożonych optymalizacji przeprowadzanych przez kompilator w maszynie VM serwera, ale w zamian zajmuje mniej czasu na analizę i kompilację fragmentu kodu. Oznacza to, że maszyna wirtualna klienta może uruchamiać się szybciej i wymaga mniejszej pojemności pamięci.
Serwerowa maszyna wirtualna zawiera zaawansowany adaptacyjny kompilator, który obsługuje wiele takich samych rodzajów optymalizacji przeprowadzanych przez optymalizację kompilatorów C ++, a także niektóre optymalizacje, których nie można wykonać za pomocą tradycyjnych kompilatorów, takie jak agresywne wprowadzanie w wirtualne wywołania metod. Jest to przewaga konkurencyjna i wydajnościowa w stosunku do kompilatorów statycznych. Technologia optymalizacji adaptacyjnej jest bardzo elastyczna i zazwyczaj przewyższa nawet zaawansowane techniki analizy statycznej i kompilacji.
Uwaga: Wydanie aktualizacji 10 jdk6 (patrz Uwagi do wydania aktualizacji: Zmiany w wersji 1.6.0_10 ) próbowało skrócić czas uruchamiania, ale z innego powodu niż opcje hotspotu, ponieważ jest pakowane inaczej z dużo mniejszym jądrem.
G. Demecki wskazuje w komentarzach, że w 64-bitowych wersjach JDK -client
opcja ta jest ignorowana przez wiele lat.
Zobacz polecenie systemu Windowsjava
:
-client
Wybiera maszynę wirtualną klienta Java HotSpot.
JDK obsługujący 64-bit obecnie ignoruje tę opcję i zamiast tego używa maszyny wirtualnej Java Hotspot Server .