Ceci est vraiment lié à HotSpot et aux valeurs d'option par défaut ( Java HotSpot VM Options ) qui diffèrent entre la configuration du client et celle du serveur.
Extrait du chapitre 2 du livre blanc ( L'architecture Java HotSpot Performance Engine ):
Le JDK comprend deux versions de la machine virtuelle: une offre côté client et une machine virtuelle adaptée aux applications serveur. Ces deux solutions partagent la base de code de l'environnement d'exécution Java HotSpot, mais utilisent des compilateurs différents qui sont adaptés aux caractéristiques de performance distinctement uniques des clients et des serveurs. Ces différences incluent la politique de compilation en ligne et les valeurs par défaut du tas.
Bien que le serveur virtuel et les machines virtuelles clientes soient similaires, la machine virtuelle serveur a été spécialement réglée pour maximiser la vitesse de fonctionnement maximale. Il est conçu pour exécuter des applications serveur de longue durée, qui nécessitent la vitesse de fonctionnement la plus rapide possible plus qu'un temps de démarrage rapide ou une plus petite empreinte mémoire d'exécution.
Le compilateur VM client sert de mise à niveau à la fois pour la machine virtuelle classique et les compilateurs juste à temps (JIT) utilisés par les versions précédentes du JDK. La machine virtuelle cliente offre des performances d'exécution améliorées pour les applications et les applets. La machine virtuelle Java HotSpot Client a été spécialement optimisée pour réduire le temps de démarrage des applications et l'empreinte mémoire, ce qui la rend particulièrement adaptée aux environnements clients. En général, le système client est meilleur pour les interfaces graphiques.
La vraie différence se situe donc également au niveau du compilateur:
Le compilateur VM client n'essaie pas d'exécuter bon nombre des optimisations les plus complexes effectuées par le compilateur dans la VM serveur, mais en échange, il nécessite moins de temps pour analyser et compiler un morceau de code. Cela signifie que la machine virtuelle cliente peut démarrer plus rapidement et nécessite une plus petite empreinte mémoire.
La machine virtuelle du serveur contient un compilateur adaptatif avancé qui prend en charge bon nombre des mêmes types d'optimisations effectuées en optimisant les compilateurs C ++, ainsi que certaines optimisations qui ne peuvent pas être effectuées par les compilateurs traditionnels, telles que l'incrustation agressive entre les invocations de méthodes virtuelles. Il s'agit d'un avantage concurrentiel et de performance par rapport aux compilateurs statiques. La technologie d'optimisation adaptative est très flexible dans son approche et surpasse généralement même les techniques avancées d'analyse statique et de compilation.
Remarque: La version de jdk6 update 10 (voir Update Release Notes: Changes in 1.6.0_10 ) a essayé d'améliorer le temps de démarrage, mais pour une raison différente de celle des options de hotspot, étant emballée différemment avec un noyau beaucoup plus petit.
G. Demecki souligne dans les commentaires que dans les versions 64 bits de JDK, l' -client
option est ignorée pendant de nombreuses années.
Voir la commande Windowsjava
:
-client
Sélectionne la machine virtuelle Java HotSpot Client.
Un JDK compatible 64 bits ignore actuellement cette option et utilise à la place la machine virtuelle Java Hotspot Server .