A diferença entre o modo de cliente da JVM e o modo de servidor
A principal diferença entre o modo de servidor JVM e o modo cliente é que, ao iniciar: - O modo do servidor é lento ao iniciar, mas uma vez iniciado, o desempenho será bastante aprimorado.
A JVM pode melhorar bastante o desempenho ao trabalhar no modo de servidor. A velocidade de inicialização dos aplicativos no modo de servidor será cerca de 10% mais lenta que o modo cliente, mas a velocidade de execução é pelo menos 10 vezes mais rápida que a VM do cliente.
Quando os parâmetros do modo de execução não são especificados, a máquina virtual começa a detectar se o host é um servidor. Nesse caso, ele começará no modo de servidor. Caso contrário, ele começará no modo cliente. A base para a detecção J2SE5.0 é de pelo menos 2 CPUs e um mínimo de 2 GB de memória.
Como a CPU do servidor, a memória e o disco rígido são mais fortes que a máquina cliente, depois que o programa é implantado, ela deve ser iniciada no modo de servidor para obter melhor desempenho;
O padrão da JVM para -xms é 1M, -xmx é 64m no modo cliente; O padrão da JVM para -xms é 128m, -xmx é 1024m no modo de servidor;
Servidor: inicialização lenta e compilação mais completa. O compilador é um compilador adaptativo com alta eficiência e foi projetado para otimizar aplicativos do lado do servidor e maximizar a velocidade de execução do programa no ambiente do servidor.
Cliente: inicialização rápida, baixo uso de memória, compilação rápida, otimizada para aplicativos de desktop, otimizados para reduzir o tempo de inicialização no ambiente do cliente;
Quando a JVM é usada para iniciar aplicativos interativos da interface da GUI, é recomendável usar o modo de cliente quando a JVM é usada para executar o programa de fundo do servidor.
Podemos verificar o modo que JVM funciona em execução: Java -version.
Sobre o GCC na Figura 1
No modo do cliente, a nova geração escolhe GC serial, enquanto a geração antiga escolhe o GC serial, enquanto a geração antiga escolhe o GC serial
No modo de servidor, a nova geração escolhe a reciclagem paralela de GC, enquanto a geração antiga escolhe o GC paralelo.
De um modo geral, existem duas maneiras de escolher nosso aplicativo do sistema: prioridade da taxa de transferência e prioridade de tempo de pausa. Para prioridade da taxa de transferência, o método GC paralelo padrão do servidor é adotado e, para a prioridade do tempo de pausa, o método GC (CMS) simultâneo é adotado.
Outros pontos de conhecimento estendidos
O JDK possui dois tipos de aplicativos VM, VM Client e VM Server. As duas soluções compartilham a base de código do hotspot do ambiente de tempo de execução do Java, mas use compiladores diferentes, recursos de desempenho exclusivos para clientes e servidores, com diferenças incluindo a escrita de políticas embutidas e valores padrão para a pilha.
Embora o servidor seja semelhante à máquina virtual do cliente, a VM do servidor ajustou especialmente a velocidade de operação máxima de pico. Seu objetivo é executar aplicativos de servidor de longa execução, que exigem as velocidades de execução mais rápidas que excedem um tempo de inicialização rápido ou uma pegada de memória de tempo de execução menor.
O Compilador VM Client é uma máquina virtual clássica e um compilador usado por atualizações em tempo real (JIT) através de versões anteriores do JDK. As máquinas virtuais do cliente fornecem desempenho aprimorado para executar aplicativos e applets. Os hotspots das máquinas virtuais Java os clientes reduziram o tempo de inicialização e o uso da memória de aplicativos para torná -los particularmente adequados para o ambiente do cliente. Em geral, o sistema do cliente possui uma melhor interface gráfica do usuário.
Portanto, a diferença real também está no nível do compilador:
O compilador de máquina virtual do cliente não tenta executar otimizações mais complexas realizadas pelo compilador na máquina virtual do servidor, mas durante a troca, leva menos tempo para analisar e compilar um código. Isso significa que a máquina virtual do cliente pode iniciar mais rápido e requer uma pegada de memória menor.
A máquina virtual do servidor contém um compilador adaptativo avançado que suporta muitas otimizações do compilador C ++ para otimização, o mesmo tipo e algumas otimizações que não podem ser feitas com compiladores tradicionais, como chamadas de método virtual ativamente inlagadas. Esta é uma vantagem competitiva e de desempenho, compilador estático. As técnicas de otimização adaptativa são muito flexíveis em sua abordagem e geralmente são superiores às técnicas avançadas de análise e compilação estáticas.
Ao iniciar o modo de servidor, a velocidade é lenta, mas uma vez executada, o desempenho será bastante aprimorado. O motivo é que, quando a máquina virtual está no modo -cliente, ele usa um compilador leve codinome C1, enquanto a máquina virtual iniciada no modo -erver usa um compilador relativamente pesado com codinome C2. C2 é relativamente completamente compilado que o compilador C1 e, após a servir, ele tem maior desempenho.
Geralmente, basta alterar a ordem das duas configurações -servidor conhecido e -Client conhecido, desde que exista o diretório java_home/jre/bin ao mesmo tempo, correspondendo à sua respectiva JVM
Depois de dizer tanto, resumi em uma frase:
O aplicativo inicia lentamente, mas é executado mais rápido no modo de servidor JVM, enquanto o aplicativo começa rapidamente, mas é mais rápido no modo de cliente JVM.
Recomendado: Execute no modo servidor no servidor e execute no modo cliente no modo cliente ou no modo GUI.