La diferencia entre el modo cliente JVM y el modo de servidor
La principal diferencia entre el modo del servidor JVM y el modo cliente es que al comenzar: - El modo del servidor es lento cuando se inicia, pero una vez que se inicia, el rendimiento mejorará enormemente.
JVM puede mejorar enormemente el rendimiento cuando se trabaja en modo servidor. La velocidad de inicio de las aplicaciones en modo servidor será aproximadamente un 10% más lenta que el modo cliente, pero la velocidad de ejecución es al menos 10 veces más rápida que la VM del cliente.
Cuando no se especifican los parámetros de modo de ejecución, la máquina virtual comienza a detectar si el host es un servidor. Si es así, comenzará en modo servidor. De lo contrario, comenzará en modo cliente. La base para la detección de J2SE5.0 es al menos 2 CPU y un mínimo de 2 GB de memoria.
Dado que la CPU del servidor, la memoria y el disco duro son más fuertes que la máquina del cliente, después de implementar el programa, debe iniciarse en modo del servidor para obtener un mejor rendimiento;
JVM predeterminado a -xms es 1m, -xmx es de 64 m en modo cliente; JVM predeterminado a -xms es 128m, -xmx es 1024m en modo servidor;
Servidor: inicio lento y compilación más completa. El compilador es un compilador adaptativo con alta eficiencia y está diseñado para optimizar las aplicaciones del lado del servidor y maximizar la velocidad de ejecución del programa en el entorno del servidor.
Cliente: Inicio rápido, bajo uso de memoria, compilación rápida, optimizado para aplicaciones de escritorio, optimizado para reducir el tiempo de inicio en el entorno del cliente;
Cuando el JVM se usa para iniciar aplicaciones interactivas de la interfaz GUI, se recomienda usar el modo cliente cuando el JVM se usa para ejecutar el programa de fondo del servidor.
Podemos verificar qué modo funciona JVM ejecutando: java -version.
Acerca de GCC en la Figura 1
En el modo cliente, la nueva generación elige GC en serie, mientras que la generación anterior elige GC en serie, mientras que la antigua generación elige GC en serie
En el modo de servidor, la nueva generación elige el reciclaje paralelo de GC, mientras que la antigua generación elige GC paralelo.
En términos generales, hay dos formas de elegir nuestra aplicación del sistema: prioridad de rendimiento y prioridad de tiempo de pausa. Para la prioridad de rendimiento, se adopta el método GC paralelo predeterminado del servidor, y para la prioridad del tiempo de pausa, se adopta el método GC concurrente (CMS).
Otros puntos de conocimiento extendidos
JDK tiene dos tipos de aplicaciones VM, Cliente VM y VM Server. Las dos soluciones comparten la base del código de punto de acceso del entorno de tiempo de ejecución Java, pero usan diferentes compiladores, características de rendimiento únicas para clientes y servidores, con diferencias que incluyen escribir políticas en línea y valores predeterminados para el montón.
Aunque el servidor es similar a la máquina virtual del cliente, la VM del servidor ha ajustado especialmente la velocidad máxima de operación máxima. Su propósito es ejecutar aplicaciones de servidor de larga duración, que requieren las velocidades de ejecución más rápidas que exceden un tiempo de inicio rápido o una huella de memoria de tiempo de ejecución más pequeña.
El compilador de VM Client es una máquina virtual clásica y un compilador utilizado por actualizaciones en tiempo real (JIT) a través de versiones anteriores de JDK. Las máquinas virtuales del cliente proporcionan un rendimiento mejorado para ejecutar aplicaciones y applets. Los puntos de acceso de los clientes de Java Virtual Machines han reducido el tiempo de inicio y el uso de la memoria de las aplicaciones para que sean particularmente adecuados para el entorno del cliente. En general, el sistema del cliente tiene una mejor interfaz gráfica de usuario.
Entonces, la verdadera diferencia también está a nivel del compilador:
El compilador de máquinas virtuales del cliente no intenta realizar optimizaciones más complejas realizadas por el compilador en la máquina virtual del servidor, pero durante el intercambio lleva menos tiempo analizar y compilar un código. Esto significa que la máquina virtual del cliente puede comenzar más rápido y requiere una huella de memoria más pequeña.
La máquina virtual del servidor contiene un compilador adaptativo avanzado que admite muchas optimizaciones del compilador C ++ para la optimización, el mismo tipo y algunas optimizaciones que no se pueden hacer con los compiladores tradicionales, como las llamadas de métodos virtuales de entrada activa. Esta es una ventaja competitiva y de rendimiento, compilador estático. Las técnicas de optimización adaptativa son muy flexibles en su enfoque y generalmente son superiores a incluso técnicas avanzadas de análisis estático y compilación.
Al comenzar el modo de servidor, la velocidad es lenta, pero una vez que se ejecute, el rendimiento mejorará enormemente. La razón es que cuando la máquina virtual está en modo de cliente, utiliza un compilador liviano con nombre C1, mientras que la máquina virtual se inició en modo servidor utiliza un compilador de peso relativamente pesado C2. C2 se compila relativamente completamente que el compilador C1, y después de servir, tiene un mayor rendimiento.
En general, simplemente cambie el orden de las dos configuraciones: servidor conocido y -cliente conocido, siempre que el directorio java_home/jre/bin exista al mismo tiempo, correspondiente a su respectivo JVM
Después de decir tanto, en realidad resumí en una oración:
La aplicación comienza lentamente, pero se ejecuta más rápido en el modo JVM del servidor, mientras que la aplicación comienza rápidamente pero se ejecuta más rápido en modo cliente JVM.
Recomendado: ejecute en modo servidor en el servidor y ejecute en modo cliente en modo cliente o en modo GUI.