La différence entre le mode client JVM et le mode serveur
La principale différence entre le mode serveur JVM et le mode client est que lors du démarrage: - Le mode serveur est lent au démarrage, mais une fois qu'il commence, les performances seront considérablement améliorées.
JVM peut considérablement améliorer les performances lorsque vous travaillez en mode serveur. La vitesse de démarrage des applications en mode serveur sera environ 10% plus lent que le mode client, mais la vitesse d'exécution est au moins 10 fois plus rapide que la machine virtuelle client.
Lorsque les paramètres du mode d'exécution ne sont pas spécifiés, la machine virtuelle commence à détecter si l'hôte est un serveur. Si c'est le cas, il commencera en mode serveur. Sinon, cela commencera en mode client. La base de la détection J2SE5.0 est d'au moins 2 CPU et un minimum de 2 Go de mémoire.
Étant donné que le processeur du serveur, la mémoire et le disque dur sont plus forts que la machine client, une fois le programme déployé, il devrait être démarré en mode serveur pour obtenir de meilleures performances;
JVM par défaut à -xms est de 1 m, -xmx est 64 m en mode client; JVM par défaut -xms est de 128 m, -xmx est 1024m en mode serveur;
Serveur: démarrage lent et compilation plus complète. Le compilateur est un compilateur adaptatif à haute efficacité et est conçu pour optimiser les applications côté serveur et maximiser la vitesse d'exécution du programme dans l'environnement du serveur.
Client: Startup rapide, utilisation à faible mémoire, compilation rapide, optimisée pour les applications de bureau, optimisée pour réduire le temps de démarrage dans l'environnement client;
Lorsque le JVM est utilisé pour démarrer les applications interactives de l'interface GUI, il est recommandé d'utiliser le mode client lorsque le JVM est utilisé pour exécuter le programme d'arrière-plan du serveur.
Nous pouvons vérifier quel mode JVM fonctionne en fonctionnant: Java -Version.
À propos du GCC de la figure 1
En mode client, la nouvelle génération choisit Serial GC, tandis que l'ancienne génération choisit Serial GC, tandis que l'ancienne génération choisit Serial GC
En mode serveur, la nouvelle génération choisit le recyclage parallèle de GC, tandis que l'ancienne génération choisit parallèle GC.
D'une manière générale, il existe deux façons de choisir notre application système: priorité de débit et priorité de temps en pause. Pour la priorité du débit, la méthode GC parallèle par défaut du serveur est adoptée et pour la priorité de temps de pause, la méthode GC (CMS) simultanée est adoptée.
Autres points de connaissance étendus
JDK dispose de deux types d'applications VM, client VM et serveur VM. Les deux solutions partagent la base de code hotspot de l'environnement d'exécution Java, mais utilisent différents compilateurs, des fonctionnalités de performances uniques pour les clients et les serveurs, avec des différences, notamment la rédaction de politiques en ligne et les valeurs par défaut pour le tas.
Bien que le serveur soit similaire à la machine virtuelle du client, la machine virtuelle du serveur a spécialement ajusté la vitesse de fonctionnement maximale de pic. Son objectif est d'exécuter des applications de serveur à long terme, qui nécessitent les vitesses d'exécution les plus rapides dépassant un temps de démarrage rapide ou une empreinte de mémoire d'exécution plus petite.
Le compilateur VM client est une machine virtuelle classique et un compilateur utilisé par les mises à niveau en temps réel (JIT) via les versions précédentes de JDK. Les machines virtuelles du client offrent des performances améliorées pour exécuter les applications et les applets. Les hotspots de Java Virtual Machines Les clients ont réduit le temps de démarrage et l'utilisation de la mémoire des applications pour les rendre particulièrement adaptés à l'environnement client. En général, le système client a une meilleure interface utilisateur graphique.
La vraie différence est donc également au niveau du compilateur:
Le compilateur de machine virtuelle client n'essaie pas d'effectuer des optimisations plus complexes effectuées par le compilateur sur la machine virtuelle du serveur, mais pendant le swap, il faut moins de temps pour analyser et compiler un morceau de code. Cela signifie que la machine virtuelle du client peut démarrer plus rapidement et nécessite une empreinte mémoire plus petite.
La machine virtuelle du serveur contient un compilateur adaptatif avancé qui prend en charge de nombreuses optimisations du compilateur C ++ pour l'optimisation, le même type et certaines optimisations qui ne peuvent pas être faites avec des compilateurs traditionnels, tels que des appels de méthode virtuelle incorporés activement. Il s'agit d'un compilateur statique compétitif et de performance. Les techniques d'optimisation adaptative sont très flexibles dans son approche et sont généralement supérieures aux techniques d'analyse et de compilation statiques même avancées.
Lorsque vous démarrez le mode serveur, la vitesse est lente, mais une fois exécuté, les performances seront considérablement améliorées. La raison en est que lorsque la machine virtuelle est en mode Client, il utilise un compilateur léger nommé C1, tandis que la machine virtuelle démarrée en mode-serveur utilise un compilateur de poids relativement lourd nommé C2. C2 est relativement bien compilé que le compilateur C1, et après le service, il a des performances plus élevées.
Généralement, modifiez simplement l'ordre des deux configurations -server connues et -client connues, tant que le répertoire java_home / jre / bin existe en même temps, correspondant à leur JVM respectif
Après avoir dit tellement de choses, je me suis résumé en une phrase:
L'application démarre lentement mais s'exécute plus rapidement en mode JVM Server, tandis que l'application démarre rapidement mais s'exécute plus rapidement en mode client JVM.
Recommandé: veuillez exécuter en mode serveur sur le serveur et exécuter en mode client en mode client ou en mode GUI.