JVM的client模式和Server模式
昨天朋友问了我一个问题,JVM client模式和Server模式之间的区别,对于这个问题之前并不知道,后来经过了一番查阅大致了解了一下,在这里简单做一下记录。
一、如何查看JVM当前的模式
想要查看JVM当前所处的模式很简单,只需要我们安装jdk时候的java -version命令就可以看到
当然我们说的是Hot Spot虚拟机。
二、启动上的差别
- Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升
- Client模式启动时,启动较快,占用内存少,针对客户端进行优化
二、修改启动的方式
在路径JAVA_HOME/jre/lib/amd64/jvm.cfg 修改-server和-client的配置即可完成更改。
PS. 64位的虚拟机只支持server模式,不存在client目录。32位的才存在client目录,笔者做测试使用的是64位的jdk,在修改为cliet之后提示了如下错误,再次修改回初始状态仍然提示错误,故如果没有硬性需求不建议盲目修改(好像client都要被摒弃了,本身java就不适合用来写客户端)!!!!有经验的大佬麻烦一起探讨产生这种问题的原因~
三、空间大小的差异
JVM在client模式默认-Xms是1M,-Xmx是64M
JVM在Server模式默认-Xms是128M,-Xmx是1024M;
四、本质
其实说Server和Client是JVM的两种工作模式是不准确的,因为它们就是不同的虚拟机,因此应该说有两种类型的JVM,在配置之后进行切换。
当虚拟机运行在-client模式的时候,使用的是一个代号为C1的轻量级编译器, 而-server模式启动的虚拟机采用相对重量级,代号为C2的编译器. C2比C1编译器编译的相对彻底,服务起来之后,性能更高。
- Server启动慢,编译更完全,编译器是自适应编译器,效率高,针对服务端应用优化,在服务器环境中最大化程序执行速度而设计
- Client启动快速,内存占用少,编译快,针对桌面应用程序优化,为在客户端环境中减少启动时间而优化