跑 Java 应用服务端程序时,都加个 -server 启动选项,什么作用呢?
直接问题 Java
man java
有明确说明:
-server Selects the Java HotSpot Server VM. For more information see Server-Class Machine Detection at http://java.sun.com/j2se/1.5.0/docs/guide/vm/server-class.html
(这里要给 Java 团队提 BUG 了:明明在 JDK 8 上 man 的,给出的链接还是 JDK 5 的)
链接跳转至:https://docs.oracle.com/javase/1.5.0/docs/guide/vm/server-class.html
JDK 8 上也有相同的页面:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html
转述一下
Java HotSpot 有两类 JVM:server VM 和 client VM。
Server VM 为服务器端应用场景做了更多优化,可以显著提高运行时的性能,而这个优化需要更多的启动时间。-server 选项指定使用 server VM 来运行。
而对于一个典型的客户端应用,需要更快的启动速度,而且用不到这些基于服务端应用的优化时,那么就通过 -client 选项指定使用 client VM 来运行。
如果不指定,则使用默认。对照官方链接中的表格,可以看到:
对于我们常用的平台,只有 Windows 特殊一些,默认是 client VM。(也好理解,认为 Windows 平台上一般跑的还是桌面客户端应用)
x86 Linux 平台会自动检测,超过 2个 CPU 和 2GB 物理内存则启用 server VM。