Java应用程序Windows与Mac OS X.

mow*_*nay 7 java macos jvm

我在一个解析XML文件的小型Windows桌面上开发了一个java应用程序.我遇到了一个非常有趣的观察,我非常好奇.

我为我的应用程序生成了一个可执行jar,并在非常强大的Windows Server机器上运行它.它有2个物理Xeon处理器,每个8核,主频为2.7 GHz,50GB RAM和7200 RPM硬盘.我启动应用程序时机器处于空闲状态,我很确定没有其他应用程序与我共享机器.

后来,我在我的Macbook Pro上运行可执行文件,以便看到它的行为.我的个人机器是Core i7,主频为2.2 GHz,配备4 GB RAM和5400 RPM HDD.

令人惊讶的是,应用程序在我个人较弱的机器上快了两倍.这是相同的输入\相同的输出.没有IO但是为了读取XML来解析它们,我在终端上没有打印,但是开始时间\结束时间和最终结果是一行

我很好奇理解这种戏剧性的表现差异背后的原因.特别是来自硬件级别较弱的机器.它是以更好的方式处理硬件的操作系统吗?是JVM工作得更好吗?

Pio*_*ski 9

在Windows上,JRE的默认安装附带HotSpot Client编译器.此编译器仅执行基本优化,与服务器HotSpot相反,后者执行更积极的优化并生成更快的代码.服务器HotSpot是大多数类Unix和Linux发行版的默认设置,包括Mac OS X.这两个编译器之间的性能差异通常是2-3倍.客户端HotSpot主要针对桌面应用程序的更快启动进行了优化,而不是针对长时间运行的流程的最佳性能.

要检查您使用的编译器,请发出以下命令:

java -version
Run Code Online (Sandbox Code Playgroud)

在我的机器上它给出:

java version "1.6.0_45"
Java (TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
                        ^^^^^^  this
Run Code Online (Sandbox Code Playgroud)

要在Windows上获取Server HotSpot,您需要下载并安装JDK,然后使用-server命令行开关运行程序.