• Java 的一次编译到处运行在目前还有优势吗?
  • 发布于 2个月前
  • 127 热度
    15 评论
如题,JAVA以前一直拿来炫耀的一次编译到处运行在目前还有优势吗?各种二进制打在镜像里面也算是一次编译到处运行吧。
用户评论
  • 久拥我i
  • 跨平台编译现在越来越简单了,Go 、Rust 等新的语言都可以很轻松的跨平台编译,如果 CI/CD 的话就更简单了,服务器端部署的情况下,java 这个优势基本上消弥殆尽了,当然,不熟悉跨平台编译的人觉得难,那就是另一码事了。用一次性跨平台编译配置的时间换 jvm 的开销,我觉得是非常值的,当然,不指 java 其他优势领域。
  • 2025/10/27 9:06:00 [ 0 ] [ 0 ] 回复
  • LoveC
  • 我一直有个疑惑,凭啥他能夸下海口说一次编译到处运行?程序里用了 win 的 api ,编译器可以自动转义成 linux 的?他所说的到处运行,应该是跨平台的意思吧。既,我这个编程语言可以在不同的平台上运行,而不是编写的脚本可以在任意平台运行,如果真的可以,那如今就不会 Electron 浏览器套壳盛行了,而是套 java 壳了。
  • 2025/10/27 9:04:00 [ 0 ] [ 0 ] 回复
  • 黄月英
  • Java 肯定没有优势了,优势都被 Web 前端、Golang 、Rust 给超越了,特别是前端的 JavaScript ,一份代码走天下,都不需要虚拟机了。
  • 2025/10/27 9:01:00 [ 0 ] [ 0 ] 回复
  • 回忆经典
  • 有优势也有劣势。当你看到一个 jar 包老大个因为里面放了十几个平台的动态库而你的程序只需要在两个平台上运行时你就不太高兴了。不过题外话 OpenJDK 兼容性确实做得比 Go Runtime 强,OpenJDK24 还能在 Windows 7 上运行,但是 Go 却不行了。
  • 2025/10/27 8:59:00 [ 0 ] [ 0 ] 回复
  • 王晶
  • JS 和 Python 甚至不需要(开发者自己)编译也能到处运行,开发效率还更高,相比之下 Java 的优势是生态成熟和码农池子大,当然这也是场景和区域限定。国外那种 native app 还不如网站功能齐全,缺乏巨无霸 app ,到处都是 web 服务的地方,JS 的应用生态和码农池子更大。现在最热的 AI ,赛博炼丹的又都是 Python 。现在各大 LLM 写代码训练得成熟的不是 JS 就是 Python ,日后马太效应还会更来更严重……

  • 2025/10/27 8:58:00 [ 0 ] [ 0 ] 回复
  • BruceLe
  • 我觉得这个问题在当时的时代背景比较重要,现在完全不重要了。
    Java 核心在于 JVM 虚拟机设计,来完成“一次编译到处运行”功能。
    现在各种服务大多也是运行在系统层级定制的虚拟机上的。
    任何语言,本质上都可以使用 dockers 等虚拟化工具来运行。
    但是 JVM 这个先发优势,给了 Java 足够的时间发展生态。使得生态成为了 Java 护城河,和 Python 一样。
    所以没有优势,唯一的优势是 Java 生态,大类的工具类库,解决方案。
  • 2025/10/25 19:35:00 [ 0 ] [ 0 ] 回复
  • pckillers
  • Cpp 和 JAVA 都争论这个话题几十年了,各自都有完整的论述.只要生态够完整就没有必要纠结.而且都到这个体量了,编译型的新语言层出不穷,基于虚机技术的几乎只有 C#和 JAVA.
    C#用户怼 JAVA 正常,Cpp 作为编译型语言的旗帜和 JAVA 辩经也正常,其他语言碰瓷 JAVA 是真好笑
  • 2025/10/25 19:30:00 [ 0 ] [ 0 ] 回复
  • Dock
  • 以现阶段看,其实是伪命题了,能到处运行又怎么样,你的依赖项还是得根据不同平台来装,除了现在少数开源软件的 GUI 采用的 Java 编写,算是用上了这个“一次编译,到处运行”的特点,其他场景下,这个的意义都不大了,如果真的想对于环境差异,进行抹平,还不如 docker 一把梭
  • 2025/10/25 19:25:00 [ 0 ] [ 0 ] 回复
  • Jeff
  • 单论体积 非云场景优势很大,比 go 那几十 mb 一坨更轻量;但我感觉这点体积也不重要,aot 快速启动比较舒服
  • 2025/10/25 13:54:00 [ 0 ] [ 0 ] 回复
  • 守一座空城
  • 没有任何优势,因为在需要运行的机器上还需要安装 JVM ,所以很多面向普通用户的软件在分发的时候,会选择把用到 JRE 打包一起分发,这种分发方式比起用 Go 写的纯静态编译的软件,没有任何优势,相比之下 Go 写的软件冷启动速度更快,体积更小,全方面地胜过 JVM 。

    假如时间倒流,当初 JAVA 选择和各大操作系统厂商合作,直接在 OS 里内置 JRE ,用户直接下载 JAR 包就能运行,那这种方式可能还有点意义,不过这种 JAVA 程序员在写代码的时候就得写各种兼容性代码来确保在各 JVM 版本里的兼容性了。放到编译型语言里,这也是编译器后端需要考虑的事情,普通的业务层代码也不关心这个。

  • 2025/10/25 12:24:00 [ 0 ] [ 0 ] 回复