jvm的client与server工作模式

Posted PacosonSWJTU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm的client与server工作模式相关的知识,希望对你有一定的参考价值。

【README】

JVM Server模式与client模式启动,最主要的差别在于:

-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升.

原因是:当虚拟机运行在-client模式的时候,使用的是一个代号为C1的轻量级编译器, 而-server模式启动的虚拟机采用相对重量级,代号为C2的编译器. C2比C1编译器编译的相对彻底,,服务起来之后,性能更高.  

java -version 可以直接查看出你使用的是client还是 server ​


【1】client

    C:\\Documents and Settings\\Administrator>java -version  
    java version "1.6.0_21"  
    Java(TM) SE Runtime Environment (build 1.6.0_21-b06)  
    Java HotSpot(TM) Client VM (build 17.0-b16, mixed mode, sharing)  

【2】server

 [root@kaifa02 ~]# java -version  
    java version "1.6.0_06"  
    Java(TM) SE Runtime Environment (build 1.6.0_06-b02)  
    Java HotSpot(TM) Server VM (build 10.0-b22, mixed mode)  

两种模式的切换可以通过更改配置(jvm.cfg配置文件)来实现:
32位的虚拟机在目录JAVA_HOME/jre/lib/i386/jvm.cfg,
64位的在JAVA_HOME/jre/lib/amd64/jvm.cfg, 目前64位只支持server模式, 配置内容大致如下

   -server KNOWN  
    -client KNOWN  
    -hotspot ALIASED_TO -client  
    -classic WARN  
    -native ERROR  
    -green ERROR  

当JVM用于启动GUI界面的交互应用时适合于使用client模式,当JVM用于运行服务器后台程序时建议用Server模式。
JVM在client模式默认-Xms是1M,-Xmx是64M;JVM在Server模式默认-Xms是128M,-Xmx是1024M。我们可以通过运行:java -version来查看jvm默认工作在什么模式。


【3】命令行

【3.1】-Xms

设置虚拟机可用内存堆的初始大小,缺省单位为字节,该大小为1024的整数倍并且要大于1MB,可用k(K)或m(M)为单位来设置较大的内存数。初始堆大小为2MB。
例如:-Xms6400K,-Xms256M

【3.2】-Xmx

设置虚拟机内存堆的最大可用大小,缺省单位为字节。该值必须为1024整数倍,并且要大于2MB。可用k(K)或m(M)为单位来设置较大的内存数。缺省堆最大值为64MB。
例如:-Xmx81920K,-Xmx80M

【3.3】-Xloggc:

将虚拟机每次垃圾回收的信息写到日志文件中,文件名由file指定,文件格式是平文件,内容和-verbose:gc输出内容相同。

【3.4】-client,-server

这两个参数用于设置虚拟机使用何种运行模式,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客户端应用程序。相反,server模式启动比client慢,但可获得更高的运行性能。

补充: 与client模式相比, server模式会做更多的编译器优化,如指令重排序等;
 

小结:

在 windows上,缺省的虚拟机类型为client模式;

如果要使用server模式,就需要在启动虚拟机时加-server参数,以获得更高性能,对服务器端应用,推荐采用server模式,尤其是多个CPU的系统,已获得更高性能。在Linux,Solaris上缺省采用server模式。

以上是关于jvm的client与server工作模式的主要内容,如果未能解决你的问题,请参考以下文章

jvm的client和server

Java Hotspot client模式和server模式的区别

JVM的Client模式与Server模式

JVM学习笔记之client server端区别

JVM client模式和Server模式的区别

JVM client模式和Server模式的区别