Dies ist wirklich verbunden mit HotSpot und der Standard Optionswerte ( Java HotSpot VM-Optionen ), die sich je nach Client- und Serverkonfiguration unterscheiden.
De Kapitel 2 des Whitepapers ( Die Java HotSpot Performance Engine Architektur ):
Das JDK enthält zwei Varianten der VM - ein clientseitiges Angebot und eine VM, die auf Serveranwendungen abgestimmt ist. Diese beiden Lösungen nutzen die Codebasis der Java HotSpot-Laufzeitumgebung, verwenden aber unterschiedliche Compiler, die auf die unterschiedlichen Leistungsmerkmale von Clients und Servern abgestimmt sind. Zu diesen Unterschieden gehören die Inlining-Richtlinie für die Kompilierung und die Heap-Standardwerte.
Obwohl die Server- und die Client-VMs ähnlich sind, wurde die Server-VM speziell darauf abgestimmt, die Spitzenbetriebsgeschwindigkeit zu maximieren. Sie ist für die Ausführung lang laufender Serveranwendungen gedacht, bei denen die schnellstmögliche Betriebsgeschwindigkeit wichtiger ist als eine schnelle Startzeit oder ein geringerer Laufzeitspeicherbedarf.
Der Client-VM-Compiler dient als Upgrade sowohl für den Classic-VM- als auch für den Just-in-Time-Compiler (JIT), die von früheren Versionen des JDK verwendet wurden. Die Client VM bietet eine verbesserte Laufzeitleistung für Anwendungen und Applets. Die Java HotSpot Client VM wurde speziell darauf abgestimmt, die Startzeit und den Speicherbedarf von Anwendungen zu reduzieren, wodurch sie sich besonders gut für Client-Umgebungen eignet. Im Allgemeinen ist das Client-System besser für GUIs geeignet.
Der eigentliche Unterschied liegt also auch auf der Ebene des Compilers:
Der Client-VM-Compiler versucht nicht, viele der komplexeren Optimierungen auszuführen, die der Compiler in der Server-VM vornimmt, benötigt dafür aber weniger Zeit für die Analyse und Kompilierung eines Codes. Dies bedeutet, dass die Client-VM schneller gestartet werden kann und weniger Speicherplatz benötigt.
Die Server-VM enthält einen fortschrittlichen adaptiven Compiler, der viele der gleichen Arten von Optimierungen unterstützt, die von optimierenden C++-Compilern durchgeführt werden, sowie einige Optimierungen, die von herkömmlichen Compilern nicht durchgeführt werden können, wie z. B. aggressives Inlining über virtuelle Methodenaufrufe. Dies ist ein Wettbewerbs- und Leistungsvorteil gegenüber statischen Compilern. Die adaptive Optimierungstechnologie ist in ihrem Ansatz sehr flexibel und übertrifft in der Regel selbst fortgeschrittene statische Analyse- und Kompilierungstechniken.
Hinweis: Die Veröffentlichung von jdk6 Update 10 (siehe Update Release Notes:Änderungen in 1.6.0_10 ) versucht, die Startzeit zu verbessern, aber aus einem anderen Grund als die Hotspot-Optionen, da sie anders verpackt sind und einen viel kleineren Kernel haben.
G. Demecki weist darauf hin in den Kommentaren dass in 64-Bit-Versionen des JDK die -client
Diese Option wird seit vielen Jahren ignoriert.
Siehe Windows java
commande :
-client
Wählt die Java HotSpot Client VM aus.
Ein 64-Bit-fähiges JDK ignoriert derzeit diese Option und verwendet stattdessen die Java Hotspot Server VM .
2022: Holger Referenzen in die Kommentare die JavaSE6 / Erkennung von Maschinen der Server-Klasse und fügte hinzu:
Nur auf 32-Bit-Windows-Systemen, -client
wurde jemals bedingungslos ausgewählt.
Andere Systeme überprüften, ob der Rechner der "Serverklasse" angehörte, was der Fall war, wenn er über mindestens 2 Kerne und mindestens 2 GB Arbeitsspeicher verfügte.
Das erklärt, warum fast alles mit -server
seit geraumer Zeit. Selbst die billigsten Computer, die Sie finden können, sind "Serverklasse"-Maschinen. Die 64er Builds von Sun/Oracle wurden nicht einmal mit einer Client-JVM ausgeliefert.