
本文探讨了在现代java运行时环境(jre/jdk 8+)中,传统“client” java虚拟机(jvm)的可用性变化。随着java技术的发展,尤其是64位系统普及后,“server” jvm已成为主流乃至唯一选择。文章将解释为何jsvc等工具仍可能显示-client选项,但实际文件结构中已不再提供对应的lib/client目录,并指导用户理解这一变化。
在Java早期版本中,Sun/Oracle提供了两种主要的HotSpot JVM模式:Client VM和Server VM。它们的设计目标和优化策略有所不同:
在过去,开发者可以通过java -client或java -server来显式选择使用哪种JVM。
jsvc(Java Service Wrapper)是一个用于将Java应用程序作为守护进程运行的工具,它允许用户指定所使用的JVM类型。在某些系统上,当执行jsvc -help命令时,可能会看到如下输出,表明它支持-client和-server选项:
/usr/bin/jsvc -help ...
...
-jvm <JVM name>
use a specific Java Virtual Machine. Available JVMs:
'server'
-client
use a client Java Virtual Machine.
-server
use a server Java Virtual Machine.
...然而,许多用户在尝试使用-client选项时,发现其Java安装目录(JAVA_HOME)下并没有lib/client这个子目录,通常只存在lib/server。例如,在Arch Linux ARM aarch64或macOS等系统上,以及更新的JRE/JDK版本中,这种现象尤为普遍。这导致了用户的困惑:jsvc提示有-client选项,但实际的Java运行时环境似乎并不提供。
立即学习“Java免费学习笔记(深入)”;
这种不一致性的根源在于Java虚拟机在近些年来的演变。随着硬件性能的提升和JVM自身的不断优化,Client VM的优势逐渐减弱,而Server VM的性能和通用性使其成为默认和首选。
3.1 Server VM成为默认选项
从Java 8开始,尤其是在64位操作系统上,Server VM已成为默认的JVM类型。这意味着,即使不显式指定-server选项,Java运行时也会使用Server VM。通过java -help命令的输出可以验证这一点:
C:\> java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
c:\>java -help
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-server to select the "server" VM
The default VM is server.从上述输出可以看出,对于Java 8(及更高版本),java -help明确指出“The default VM is server.”,并且不再列出-client选项。
3.2 lib/client目录的消失
为了支持不同的JVM模式,早期的Java安装会包含相应的库文件,例如lib/client和lib/server。但随着Client VM的逐步淘汰,这些对应的库文件和目录也随之消失。检查现代JDK的安装目录结构可以证实这一点。例如,在JDK 11的安装中,lib目录下通常只有server目录:
c:\Program Files\java\jdk-11.0.1>tree lib Folder PATH listing for volume OS Volume serial number is 00000051 4C32:5A1F C:\PROGRAM FILES\JAVA\JDK-11.0.1\LIB ├───jfr ├───security └───server
这表明,在现代Java发行版中,Client VM及其相关的库文件已不再提供。
综合上述分析,jsvc工具中显示的-client选项很可能是一个历史遗留功能,或者旨在兼容非常旧版本的Java运行时。对于大多数在现代Java环境(Java 8及更高版本,尤其是在64位系统上)中部署应用程序的用户来说,Client VM已不再可用或不再是相关选项。
建议:
总之,Client JVM在现代Java生态系统中的作用已微乎其微,Server JVM已成为事实上的标准。理解这一演变有助于开发者更有效地配置和管理Java应用程序。
以上就是现代Java环境中Client JVM的演变与jsvc的兼容性考量的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号