Podsumowanie dwóch maszyn wirtualnych Javy: Server i Client
--------------------------------------------------------------------od siebie----------------------------------------------------------------------- Obecnie tylko 64-bitowy obsługuje tryb serwerowy
Maszyny wirtualne serwera uruchamiają się około 10% wolniej niż maszyny klienckie.Działa co najmniej 10 razy szybciej niż Client VM; Ponieważ CPU, pamięć i dysk twardy serwera są wydajniejsze niż komputer kliencki, po wdrożeniu programu powinien być uruchamiany w trybie serwerowym, aby uzyskać lepszą wydajność. JVM domyślnie ustawia 1M w trybie klienta i 64M dla -Xmx. JVM domyślnie ustawia 128M w trybie serwera i 1024M w -Xmx.
server:启动慢,编译更完全,编译器是自适应编译器,效率高,针对服务端应用优化,在服务器环境中最大化程序执行速度而设计。
client:快速启动,内存占用少,编译快,针对桌面应用程序优化,为在客户端环境中减少启动时间而优化; O GC: W trybie clien nowa generacja wybiera GC szeregowy, a starsza generacja GC W trybie serwera nowa generacja wybiera równoległy recykling GC, a stara generacja równoległą GC Ogólnie rzecz biorąc, istnieją dwa sposoby wyboru aplikacji systemowej: priorytet przepustowości i priorytet czasu pauzy, domyślny tryb równoległego GC serwera służy do priorytetu przepustowości, a tryb współbieżny GC (CMS) jest wybierany dla priorytetu czasu pauzy.
--------------------------------------------------------------------z przeglądarki------------------------------------------------------------------------- JDK ma dwa typy maszyn wirtualnych: klientów VM oraz aplikacje serwerowe VM. Oba rozwiązania dzielą kodowy hotspot z czasem uruchomienia Java, ale używają różnych kompilatorów dla unikalnych cech wydajnościowych zarówno klienta, jak i serwera, a różnice te obejmują pisanie polityk inline i domyślne ustawienia sterty.
Chociaż serwery i maszyny wirtualne klienckie są podobne, maszyny serwerowe zostały specjalnie dostosowane do maksymalnej prędkości pracy w szczytowych momentach. Ma on na celu uruchamianie długo działających aplikacji serwerowych, które wymagają najszybszej prędkości działania poza szybkim czasem uruchamiania lub niewielkim obciążeniem pamięci w czasie działania.
Customer VM Compiler to kompilator używany przez klasyczne maszyny wirtualne oraz aktualizacje w czasie rzeczywistym (JIT) w poprzednich wersjach JDK. Wirtualne maszyny klienckie zapewniają lepszą wydajność dla uruchamiania aplikacji i apletów. Klienci hotspotów maszyn wirtualnych Java zostali specjalnie dostosowani, aby zmniejszyć czas uruchamiania aplikacji i zużycie pamięci, czyniąc je szczególnie odpowiednimi dla środowisk klientów. Ogólnie rzecz biorąc, system kliencki ma lepszy graficzny interfejs użytkownika.
Prawdziwa różnica dotyczy także poziomu kompilatora:
Kompilator wirtualnej maszyny klienckiej nie podejmuje bardziej złożonych optymalizacji wykonywanych przez kompilator na maszynie wirtualnej serwera, ale podczas wymiany zajmuje mniej czasu na analizę i skompilowanie fragmentu kodu. Oznacza to, że wirtualne maszyny klienckie mogą uruchamiać się szybciej i wymagają mniejszej ilości pamięci.
Wirtualna maszyna serwera zawiera zaawansowany adaptacyjny kompilator wspierający wiele optymalizacji kompilatorów C++ tego samego typu, a także niektóre optymalizacje, których nie da się wykonać tradycyjnymi kompilatorami, takie jak agresywne wywołania metod inline in virtual method. To statyczny kompilator z przewagą konkurencyjną i wydajnościową. Techniki optymalizacji adaptacyjnej są bardzo elastyczne w swoim podejściu i często przewyższają nawet zaawansowane techniki analizy statycznej i kompilacji.
Gdy uruchamia się tryb -Server, prędkość jest wolna, ale po uruchomieniu wydajność znacznie się poprawia, ponieważ: gdy maszyna wirtualna jest w trybie -Client, używa lekkiego kompilatora o nazwie kodowej C1, a maszyna wirtualna uruchamiana w trybie -Server korzysta z kompilatora o nazwie kodowej C2, który jest stosunkowo dokładnie skompilowany niż kompilator C1, a wydajność jest wyższa po serwisie.
Generalnie, jeśli zmienisz kolejność dwóch konfiguracji -server KNOWN i -client KNOWN,Założenie jest takie, że zarówno foldery serwera, jak i klienta istnieją w katalogu /jre/bin JAVA_HOMEodpowiadające ich odpowiednim JVM
|