一个经常引起很多争论的主题是,哪个是开发Java应用程序的最佳操作系统。本文对这个问题给出了一个观点。
Java
在Windows
、macOS
和Linux
发行版上运行得非常好。
我们的大部分软件都是开源的Java
库,所以我们不会或者说我们不能要求我们的客户在特定的操作系统上运行。您可能会惊讶地听到,我们也没有规定我们的员工应该使用哪种操作系统。我们让他们使用摩擦最小的,使用效率最高的。
当涉及到开发Java
应用程序的设置时,最重要的选择是您选择的集成开发环境(IDE
),而不是操作系统的选择。选择一个好的IDE
可以提高您的生产力,但我们不会强迫公司中的每个人都使用相同的IDE
。也就是说,我遇到很多Java
开发人员都选择了IntelliJ
作为他们的首选IDE:JetBrains
一定做对了。
在使用IntelliJ
之前,我曾经使用Eclipse
。大约5年前,我开始使用IntelliJ
。起初,我不太喜欢IntelliJ
:没有什么是我所期望的,感觉我的手被砍掉了,因为一切似乎都要多花十倍的时间。随着时间的推移,我越来越喜欢它,并欣赏它出色的代码重构。
在考虑在哪个操作系统上开发时,值得考虑目标架构的操作系统。通常是在Windows
上开发并部署到Linux
。也有一部分同事在macOS
进行开发。但几乎每个组织都使用Linux
进行生产。
虽然您开发的操作系统和生产操作系统不必相同,但在选择开发操作系统时,最好考虑您的生产操作系统
FreeBSD
是macOS
的基础。这不是Linux
,而是Unix
,所以他们有合理程度的相似性,特别是在命令、shell
等方面。然而,在覆盖范围下存在相当程度的差异:macOS
不提供相同的细粒度控制。如果您打算进行低延迟开发,这可能会对您产生负面影响。例如,您希望控制线程被固定在哪些内核上。对于大多数Java
开发人员来说,缺乏细粒度控制通常不是问题,但如果确实与您有关,您应该选择Linux
。这里的关键是,如果您将服务器端应用程序部署到Linux
,选择Linux
或macOS
作为您的开发环境会非常有意义。
macOS
以更酷、更漂亮和更漂亮而闻名,但它确实具有真正的好处,可以提高您的生产力。
在我的团队,大约50%
的开发人员使用macOS
,50%
使用Linux
或Windows
。最近,Linux
上还提供了更多应用程序,谷歌文档等基于网络的应用程序在这种环境中运行良好,但值得注意您打算使用的所有应用程序是否都能在Linux
上运行。或者,您可以使用虚拟化,或者,如果您永远不必同时运行Windows
和Linux
应用程序,您可以双启动。
Mac
并不总是完美的。我的一个同事有一台2019年Intel 16英寸的MacBook。他经常要在冰袋上跑步。否则,它将热节流。许多非mac
的ultrabook
也存在这个问题。在那些薄的一体式外壳上植入英特尔芯片是一个错误,但苹果现在用他们新的硅芯片mac解决了这个问题。最近,英特尔在他们的第12代架构中引入了新的混合核心模型,改进了他们的热问题。AMD的热效率比英特尔更高,但就每瓦特的性能而言,无论是英特尔还是AMD目前都无法与ARM或苹果竞争。
无论开发环境如何,归根结底,软件都需要在给定的目标操作系统上运行。开源Java
库可以帮助抽象平台差异,以便在不同开发和目标操作系统之间获得基本无缝的开发体验,以获得低级功能。(macOS
和Linux
不同的一些示例包括文件锁定和线程亲和力,这些库可以帮助两个平台之间的这些功能正常化。)归根结底,为了提取最佳性能,在部署、配置和调整低延迟软件堆栈时,需要仔细了解每个目标平台的细微差别,在开发阶段对目标操作系统的一些曝光和熟悉可能是有益的。
结论
首先,为了开发,我建议使用您最熟悉的操作系统。如果您对任何操作系统都没有太多经验,我建议您使用Windows
或macOS
。
- 如果您预算有限,
Linux
是一个更便宜的选择,但请仔细检查您是否可以在Linux
上运行所需的所有代码。除非您想忍受双启动或虚拟机,否则您可能需要支付预算,并获得第二台(或旧)机器来运行Windows
。如果您选择双启动,那么对于桌面,我建议将其设置为两个引导磁盘(每个操作系统一个)。这是这样,如果出了问题,你可以更换一个。 - 另一方面,如果您正在编写低延迟代码,并且必须对操作系统子系统有良好的控制,请选择
Linux
。 - 或者,我会选择
macOS
。
关键是,选择Mac
、Windows
或Linux
有点像政治或宗教:人们强烈认为他们的选择是正确的,并且经常对不同的观点视不关心(我觉得这很有趣)。