Java特定于操作系统的构建性能

乔纳森

我们目前正在评估我们下一代公司范围内的开发人员的PC配置,并且发现了一些非常奇怪的东西。

我们相当大的整体-在我们当前的配置下,构建时间约为 4.5分钟(无需测试,只需编译)。

对于我们的下一代配置,我们升级了几个组件。处理器的频率和IPC适度增加,CPU内核数量增加一倍,并且从小型SATA SSD切换到额定速度> 3GBps的NVMe SSD。此外,下一代配置将从Windows 7切换到Windows 10。

在执行第一个测试时,我们注意到构建时间几乎相同(4.3分钟),这比我们预期的要少得多。

在我们的实验过程中,我们曾尝试从Windows主机上运行的虚拟Linux机器中运行构建过程。在旧配置(Windows7)上,我们将构建时间从4.5分钟减少到了〜3.7分钟,在Windows 10主机上,我们将构建时间从4.3分钟减少到了2.3分钟。我们已经排除了病毒扫描之类的东西。

我们对这些结果感到非常惊讶,并试图找到另一种解释,而不是一些关于不同操作系统的几乎是宗教和侮辱性的陈述。

所以问题是:在配置Windows机器以使速度几乎是在同一Windows主机上虚拟化运行的Linux速度的一半时,我们可能会做错什么?尤其是所有硬件的进步似乎都被从Windows 7切换到10所吞噬。

另一个问题是:我们如何让javac进程占用更多的内核,因为现在,使用Hotspot JDK 8,我们最多可以看到构建真正使用的两个内核。我已经读过有关sjavac的文章,但这似乎只是一个实验性功能,仅适用于OpenJDK9以后,对吧?

乔纳森

经过将近一年的试验,我们得出结论,确实是NTFS是行凶的。如果您有一个带有Linux主机的ntfs用户分区,则与all-windows-setup相比,您会得到一些相似的结果。

我们进行了gradle构建,eclipse内部构建,启动wildfly以及在多个设备上运行以数据库为中心的测试的基准测试。从Windows切换到Linux时,我们所有的基准测试始终显示出至少100%的速度提升(有时,Windows在现实世界基准测试中所花费的时间是Linux的3倍,某些人为基准测试所带来的速度提高了60%!)。尤其是在笔记本电脑上,我们遇到的噪音要少得多,因为完整版本的处理器总负荷要比Windows少得多。

我们的结论是,在过去的一年中从Windows切换到Linux。

关于并行化,我们意识到,这是某种形式的代码纠缠。解决这个问题有助于gradle和javac大量并行化构建(也可以查看gradle-composite-builds)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

CMAKE中特定于操作系统的说明:如何?

Java开发的最佳操作系统?

我应该学习特定于操作系统的语言还是类似Java的语言?

Travis CI + Go:为不同的操作系统创建特定的构建流程

使GO构建适应不同的操作系统

JxBrowser将BrowserPreferences.setChromiumDir()设置为具有特定于操作系统的二进制文件的目录,但仍尝试提取,抛出

是否存在可以输出特定于操作系统的换行符的格式规范?

根据构建操作系统部署不同的文件

点网核心构建平台/操作系统特定的代码或类文件

Python setuptools:将配置文件分发到特定于操作系统的目录

Java如何确定操作系统名称?

如何使用JUnit测试特定于操作系统的方法?

获取特定于操作系统的键盘快捷键,以进行复制和粘贴

有没有办法知道npm软件包是否具有特定于操作系统的构建要求?

在IntelliJ插件中运送特定于操作系统的二进制文件

操作系统特定的pre_task

CLI'dotnet new classlib'命令不支持.NET 5特定于操作系统的TFM

Java / Hector cassandra-client在不同操作系统上的不同性能

在节点/ Grunt中执行特定于操作系统的脚本

对Windows操作系统进行性能分析

Maven:如何允许构建某些操作系统?

如何使用Java创建操作系统?

我们如何创建特定于操作系统的插件

如何从拉取请求的功能分支中删除特定于操作系统的提交?

如何使用Java确定操作系统?

构建容器优化的操作系统 - 交换 SSH 实现

挂载操作系统特定的卷

java线程和操作系统线程

构建分段字典操作系统报告:不是目录