首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JVM——Client模式虚拟机与server模式虚拟机的区别

目前java虚拟机有两种模式,分别为Client模式和Server模式。这两种模式可以使用-Client和-Server参数可以进行设置。如果没有设置的话,怎么办呢?那当然难不倒虚拟机,以它的智商当然会根据当前计算机系统环境自动选择运行模式。

那它怎么检测呢?

当不指定运行模式参数时,虚拟机启动检测主机是否为服务器,如果是,则以Server模式启动,否则以Client模式启动(J2SE5.0检测的根据是至少2个CPU和最低2GB内存)

说到这里,也许大家都想知道自己的JVM是以什么模式在工作呢?用以下口诀就ok!

我们可以通过运行:java -version来查看jvm默认工作在什么模式。来试试看:

从上图我们可以看到,我的JVM是以Sever模式运行的。

上面说到JVM有两种形式,为什么我的不是以Client模式运行的呢?这两种模式又有什么区别呢?

它们的主要区别如下:

上面第二点中我们说到,Server启动慢,不过它虽然速度较慢,但是一旦运行起来后,性能将会有很大的提升,原因是:当虚拟机在-Client模式的时候,使用的是一个代号为C1的轻量级编译器,而-Server模式启动的虚拟机采用相对重量级代号为C2的编译器,C2比C1编译器编译的相对彻底,服务起来之后,性能高。

所以这两种模式的区别可以总结为一句话:

即JVM Server模式下应用启动慢但运行速度快,JVM Client模式下应用启动快但运行速度要慢些

既然如此,那什么时候用Server模式,什么时候用Client模式呢?

JVM在client模式默认-Xms是1M,-Xmx是64M;JVM在Server模式默认-Xms是128M,-Xmx是1024M;

Server启动慢,编译更完全,编译器是自适应编译器,效率高,针对服务端应用优化,在服务器环境中最大化程序执行速度而设计;Client启动快速,内存占用少,编译快,针对桌面应用程序优化,为在客户端环境中减少启动时间而优化;

当JVM用于启动GUI界面的交互应用时适合于使用client模式,当JVM用于运行服务器后台程序时建议用Server模式。

为什么这样说呢?

因为JVM 并不能预测什么时候数据会从虚拟内存搬到物理内存或者从物理内存搬到虚拟内存,这是操作系统的事情,它不会让应用程序知道这件事。

对于PC 机来说,如果我们频繁地在多个程序切换,每次把程序带到前台窗口或退到后台窗口都会导致 Windows 操作系统在物理内存和硬盘上的虚拟内存之间切换,这都是会影响性能的。一个常见的事情就是我们开着多个程序,并且把 Java 程序切换到最小化,另一个非 Java 程序最大化,然后我们出门吃饭 2 小时后回来把 Java 程序最大化,你会发现这个时候切换到最大化可能需要 较长的一个时间,这就是内存紧张时虚拟内存和物理内存间交换数据时导致 JVM 频繁地触发垃圾收集(GC)导致的性能问题。而这个现象在 server 模式不会出现,因为它是假设服务器专用的,基本上没有前台程序,都是后台程序。

对于普通 PC来说,工作在 client 模式就好了,特别是你的内存不是很大时不需要 server 模式,因为 server 模式是为服务器准备的,它的意思就是说这个服务器启动之后基本上不做别的,所以可以把所有内存都尽量给 JVM 使用,所以才能得到一个更好的性能。

好啦,以上就是关于JVM的两种模式的相关知识总结啦!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181221G0IZO000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券