Java 的一次编译到处运行在目前还有优势吗

1 天前
 SGL
各种二进制打在镜像里面也算是一次编译到处运行吧。
4380 次点击
所在节点    Java
56 条回复
renfei
1 天前
有啊,国产化替代的时候,我们 javaer 不用考虑各种国产化 CPU 的差异,都扔给 JVM 了
SGL
1 天前
@renfei 那 JVM 的适配是国产化 CPU 厂商自己提供的吗。
zhoudaiyu
1 天前
@SGL #2 用 openjdk 的就可以,无非就是 ARM 和 X86
hronro
1 天前
没有任何优势,因为在需要运行的机器上还需要安装 JVM ,所以很多面向普通用户的软件在分发的时候,会选择把用到 JRE 打包一起分发,这种分发方式比起用 Go 写的纯静态编译的软件,没有任何优势,相比之下 Go 写的软件冷启动速度更快,体积更小,全方面地胜过 JVM 。

假如时间倒流,当初 JAVA 选择和各大操作系统厂商合作,直接在 OS 里内置 JRE ,用户直接下载 JAR 包就能运行,那这种方式可能还有点意义,不过这种 JAVA 程序员在写代码的时候就得写各种兼容性代码来确保在各 JVM 版本里的兼容性了。
hronro
1 天前
@renfei 放到编译型语言里,这也是编译器后端需要考虑的事情,普通的业务层代码也不关心这个。
bootvue
1 天前
只有生态的优势 各种轮子 除此之外没有任何优势
yakun4566
1 天前
@hronro #4 很多年的 Javaer ,没有用过 go ,之前遗留的项目有个 Go 的项目,同事在部署的时候本地打完包在服务器上运行不了,最后发现是 win10 跟 Windows server 的依赖不一样,还把 go 的版本降级了才打包能在服务器运行。相对于在服务器上装个符合版本的 jvm ,我觉得还是 java 比较省心
bronyakaka
1 天前
单论体积 非云场景优势很大,比 go 那几十 mb 一坨更轻量;但我感觉这点体积也不重要,aot 快速启动比较舒服
gam2046
1 天前
以现阶段看,其实是伪命题了,能到处运行又怎么样,你的依赖项还是得根据不同平台来装,除了现在少数开源软件的 GUI 采用的 Java 编写,算是用上了这个“一次编译,到处运行”的特点,其他场景下,这个的意义都不大了,如果真的想对于环境差异,进行抹平,还不如 docker 一把梭
joshuacavell
1 天前
Cpp 和 JAVA 都争论这个话题几十年了,各自都有完整的论述.只要生态够完整就没有必要纠结.而且都到这个体量了,编译型的新语言层出不穷,基于虚机技术的几乎只有 C#和 JAVA.
C#用户怼 JAVA 正常,Cpp 作为编译型语言的旗帜和 JAVA 辩经也正常,其他语言碰瓷 JAVA 是真好笑😄
hronro
1 天前
@yakun4566 你说的依赖是外部软件依赖么,这种换 JAVA 来不也还是一样?
zxjxzj9
1 天前
现在来看最能解决一次编译到处运行的反而是 docker ,其次是 go 这种到处编译到处运行的,最后才是 java 这种一次编译但是要考虚拟机到处运行的。
dzdh
1 天前
@yakun4566 #7

1.2x 版本前后对 win 的支持不一样好像删除了一个什么 api 。win32 啥的。https://github.com/golang/go/issues/57003
unused
1 天前
@zxjxzj9 docker 只能处理依赖,解决不了架构问题
huijiewei
1 天前
优势当然是有的。一个写业务的,直需要考虑在 jvm 里面没 bug 就行了,平台和架构的复杂性 jvm 都帮你解决了。

你自己试试 go 。编译完,目标系统稍微升级个小版本就可能 boom
han1988
1 天前
@renfei 国产 JVM 的 bug 怎么修?
fortytwo
1 天前
我觉得这个问题在当时的时代背景比较重要,现在完全不重要了。
Java 核心在于 JVM 虚拟机设计,来完成“一次编译到处运行”功能。
现在各种服务大多也是运行在系统层级定制的虚拟机上的。
任何语言,本质上都可以使用 dockers 等虚拟化工具来运行。


但是 JVM 这个先发优势,给了 Java 足够的时间发展生态。使得生态成为了 Java 护城河,和 Python 一样。

所以没有优势,唯一的优势是 Java 生态,大类的工具类库,解决方案。
Ayanokouji
1 天前
1. 一次编译到处运行在目前没有啥优势,java 自己都在搞 native
2. 不能否认 jvm 的其他优势
dddd1919
1 天前
jvm 优势还是有的,程序自身的适配能力强。
但系统越来越复杂化,除了应用本身,外部依赖越来越多,比如图片处理会用到 imagemagick ,视频加工用到 ffmpeg ,一个完整应用的边界从一个简单进程延伸到各种第三方依赖,所以 java 的理念在今天也就拓展到虚拟化技术上,把整套系统打包成一个可以到处运行的包,比如大型的 vm ,或者轻量的 docker
raptor
1 天前
JAVA 的优势早就不在这里了,而在于生态和会的人多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1168179

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX