2013-09-25 173 views
7

我在解析XML文件的小型Windows桌面上开发了一个Java应用程序。我遇到了一个非常有趣的观察,我很好奇。Java应用程序Windows与Mac OS X

我为我的应用程序生成了一个可执行的jar文件,并将它运行在功能非常强大的Windows Server计算机上。它有2个物理Xeon处理器,每个8个内核主频为2.7 GHz,50GB RAM和7200 RPM硬盘。当我开始我的应用程序时,机器闲置,我很确定没有其他应用程序与我共享该机器。

后来,我在我的Macbook Pro上运行可执行文件,以便查看其行为。我个人的机器是Core i7,主频为2.2 GHz,带有4 GB RAM和5400转硬盘。令人惊讶的是,该应用程序在我个人较弱的机器上快了两倍。这是相同的输入\相同的输出。没有IO但是为了读取XML来解析它们,我在终端上没有打印任何内容,但是开始时间\结束时间&最终结果是一行

我非常好奇理解这种戏剧性能差异背后的原因。特别是来自硬件层面上较弱的机器。它是以更好的方式处理硬件的操作系统吗?它是JVM工作更好吗?

回答

9

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

要检查你正在使用发出以下命令,编译器:

java -version 

在我的机器它给出:

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 

要获得服务器的HotSpot在Windows,你需要下载和安装JDK然后用-server命令行开关运行程序。

+0

你好Piotr,你确定这一点。它会导致如此戏剧性的性能差异,并使功能更强大的机器性能更好。你认为我应该用Linux发行版来取代Windows吗?我投票赞成非常有益的信息。谢谢 – mowienay

+0

首先 - 检查Windows机器上HotSpot编译器的类型。表现差异可能还有其他原因,但这是我头顶的东西。 –

+0

我确实喜欢你所说的话。使用服务器命令,它在我的桌面Windows机器上工作,就像我的个人MAC机器一样。这是非常非常有益的建议。我很高兴看到Server强大的机器上的性能。再次感谢你 – mowienay