7

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

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

后来,为了好玩,我在我的 Macbook Pro 上运行该可执行文件以查看其行为。我的个人机器是 Core i7,主频为 2.2 GHz,配备 4 GB RAM 和 5400 RPM HDD。

令人惊讶的是,在我个人较弱的机器上,该应用程序的速度提高了两倍。这是相同的输入\相同的输出。没有 IO,但为了读取 XML 来解析它们,我在终端上什么都不打印,但 Start Time \ End Time & Final result 是一行

我很想了解如此巨大的性能差异背后的原因。特别是在硬件级别较弱的机器上。它是以更好的方式处理硬件的操作系统吗?JVM工作得更好吗?

4

1 回答 1

9

在 Windows 上,JRE 默认安装带有 HotSpot 客户端编译器。这个编译器只做基本的优化,与服务器 HotSpot 相反,它做更积极的优化并产生更快的代码。Server 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

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

于 2013-09-25T17:55:43.860 回答