【jvm jdk】JVM client模式和Server模式的区别

概述

JVM有两种运行模式ServerClient。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server启动慢,但稳定后速度比Client远远要快。

所以通常用于做服务器的时候我们用服务端模式,如果你的电脑只是运行一下java程序,就客户端模式就可以了。当然这些都是我们做程序优化程序才需要这些东西的,普通人并不关注这些专业的东西了。其实服务器模式即使编译更彻底,然后垃圾回收优化更好,这当然吃的内存要多点相对于客户端模式。

1. 当前是Client or Server?

使用Java -version命令就能显示出当前虚拟机处于哪种模式。

Client

如下图所示,可以看到HotSpot虚拟机采用Client模式启动的。

在这里插入图片描述

Server

如下图所示,可以看到HotSpot虚拟机采用Server模式启动的。另外我们也能看到该虚拟机是64位的。如果像上面的Client图中那样不显示位数,则是32位虚拟机。所以使用java -version也能查看虚拟机是32位还是64位。

在这里插入图片描述

2. Client与Server切换

2.1 模式配置文件

JVM启动时采用何种模式是在名为jvm.cfg的配置文件中配置的。

32位JDK

在32位JDK中,jvm.cfg位置为:JAVA_HOME/jre/lib/i386/jvm.cfg

jdk1.6.0_43 /jre/lib/i386/jvm.cfg中配置:(此时为client模式)

-client KNOWN     //KNOWN 说明支持client 模式
-server KNOWN      //KNOWN 说明支持server 模式
-hotspot ALIASED_TO -client    //和模式无关,即使切换模式,也可以一直不变
-classic WARN
-native ERROR
-green ERROR

64位JDK

在64位JDK中,jvm.cfg位置为:JAVA_HOME/jre/lib/amd64/jvm.cfg

-client KNOWN
-server IGNORE    //不支持server 
-hotspot ALIASED_TO -server
-classic WARN
-native ERROR
-green ERROR

2.2 模式切换

如果要切换启动模式,首先要确认JDK支持哪一种或两种模式。查看JAVA_HOME/jre/bin目录下是否存在clientserver目录。

32位的JDK一般都支持server和client两种模式。64位的虚拟机好像只支持server模式,没有client目录。如下为32位JDK模式支持目录:
在这里插入图片描述

根据支持的模式,修改出现的顺序即可

server模式 :

-server KNOWN
-client KNOWN

client模式:

-client KNOWN
-server KNOWN

修改jvm.cfg如果没有生效,可能与环境有关系,尤其本地有多个版本情况下,可以参考 切换jdk版本不成功解决,大致原因可能是jvm.cfg被多版本污染了,清理完后再试试

64位因为只支持server模式,如果我们修改了配置为client模式,启动JVM时会报错,无法启动。

注意:配置过程中不能存在空行,否则将报错,但是配置文件的最后一行需要留一行空白,否则也会报错

下面是我的一些报错信息:

Warning: No leading - on line 32 of `D:\Program Files (x86)\Java\jdk1.7.0_72\jre\lib\i386\jvm.cfg'
Warning: Missing VM type on line 32 of `D:\Program Files (x86)\Java\jdk1.7.0_72\jre\lib\i386\jvm.cfg'
Warning: No leading - on line 37 of `D:\Program Files (x86)\Java\jdk1.7.0_72\jre\lib\i386\jvm.cfg'
Warning: Missing VM type on line 37 of `D:\Program Files (x86)\Java\jdk1.7.0_72\jre\lib\i386\jvm.cfg'
Warning: Unknown VM type on line 44 of `D:\Program Files (x86)\Java\jdk1.7.0_72\jre\lib\i386\jvm.cfg'

参考 JVM client模式和Server模式的区别

关于JDK的Server和Client模式的切换

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 JDK 1.8 中所有 JVM 参数: 1. 标准参数: - `-client` 或 `-server`: 选择使用客户端或服务器模式运行 JVM。 - `-cp` 或 `-classpath`: 指定类路径。 - `-D`property=value: 设置系统属性。 - `-verbose[:class|gc|jni]`: 输出详细的日志信息。 - `-version`: 输出版本信息并退出。 - `-showversion`: 输出版本信息,但不退出。 - `-help`: 输出帮助信息并退出。 2. 非标准参数: - `-Xmx`: 指定 JVM 最大可用内存。 - `-Xms`: 指定 JVM 启动时分配的内存大小。 - `-Xmn`: 指定 JVM 中年轻代的大小。 - `-Xss`: 指定线程的栈大小。 - `-Xnoclassgc`: 禁用类垃圾收集。 - `-XX:PermSize` 和 `-XX:MaxPermSize`: 指定永久代的初始大小和最大大小。 - `-XX:NewRatio`: 设置年轻代和老年代的比例。 - `-XX:SurvivorRatio`: 设置 Eden 区和 Survivor 区的比例。 - `-XX:MaxTenuringThreshold`: 设置对象进入老年代之前的最大年龄。 - `-XX:+UseConcMarkSweepGC`: 开启 CMS 垃圾回收器。 - `-XX:+UseParNewGC`: 开启并行年轻代垃圾回收器。 - `-XX:+UseSerialGC`: 开启串行垃圾回收器。 - `-XX:+DisableExplicitGC`: 禁用显式的垃圾回收。 - `-XX:+PrintGCTimeStamps`: 输出垃圾回收的时间戳。 - `-XX:+PrintGCDetails`: 输出详细的垃圾回收信息。 - `-XX:+HeapDumpOnOutOfMemoryError`: 内存溢出时生成 heap dump 文件。 - `-XX:HeapDumpPath`: 指定 heap dump 文件的输出路径。 - `-XX:OnOutOfMemoryError`: 内存溢出时执行指定的命令。 以上仅是 JDK 1.8 中的一部分 JVM 参数,更多参数可参考官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值