V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SGL
V2EX  ›  Java

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

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

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

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

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


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

    所以没有优势,唯一的优势是 Java 生态,大类的工具类库,解决方案。
    Ayanokouji
        18
    Ayanokouji  
       11 小时 46 分钟前
    1. 一次编译到处运行在目前没有啥优势,java 自己都在搞 native
    2. 不能否认 jvm 的其他优势
    dddd1919
        19
    dddd1919  
       11 小时 46 分钟前
    jvm 优势还是有的,程序自身的适配能力强。
    但系统越来越复杂化,除了应用本身,外部依赖越来越多,比如图片处理会用到 imagemagick ,视频加工用到 ffmpeg ,一个完整应用的边界从一个简单进程延伸到各种第三方依赖,所以 java 的理念在今天也就拓展到虚拟化技术上,把整套系统打包成一个可以到处运行的包,比如大型的 vm ,或者轻量的 docker
    raptor
        20
    raptor  
       11 小时 41 分钟前
    JAVA 的优势早就不在这里了,而在于生态和会的人多
    dacapoday
        21
    dacapoday  
       11 小时 29 分钟前
    WASM+(C/C++,Rust,Python)
    james2013
        22
    james2013  
       11 小时 4 分钟前 via Android
    当然有优势,做为后端项目,生态成熟,强类型,到处运行。除了内存占用的较多
    我用了几年 python ,python 大项目光是在本机 win10 和服务器 unbutu 进行运行的差距就太大了。
    moverinfo
        23
    moverinfo  
       10 小时 40 分钟前 via iPhone
    如果单从一次编译到处运行,我认为没有优势。因为实际情况是你的软件并没有一会儿在 Windows 上运行,一会儿在 Linux 上运行的需要。而 Java 的优势是它的健壮性,稳定性,调试也相对容易。它的生态还是比较庞大的。你用另一个语言真的无法替代它。

    我最近聚焦在 Java 的框架设计上,期待开发一套轻量级、同时支持命令行和 Web 服务的方式运行的框架。这样的开发出来的软件维护起来就会比较方便。
    000sitereg
        24
    000sitereg  
       9 小时 0 分钟前
    @moverinfo 是的 但是会运行在不同的 linux 发行版上。但是只要转好了 jvm 就都不管了。
    我可以本地编译放到服务器,也可以从服务器下载我的程序在本地跑。
    CPP 做不到。已经实现当初的目标了。后来者 go 啥的 上面已经说了
    rb6221
        25
    rb6221  
       8 小时 53 分钟前
    有的兄弟有的
    草台班子公司里,我在我的 windows 开发机上改了 java 代码,然后打个 jar 出来,把这个 jar 直接丢到 linux 服务器上就行了
    lysShub
        26
    lysShub  
       6 小时 52 分钟前
    一直认为这种说法很取巧,还不是先得安装对应系统架构的 JVM

    要求有 gcc 环境,那 C 不也能 run anywhere?
    Gilfoyle26
        27
    Gilfoyle26  
       6 小时 49 分钟前
    有优势,好招人 ,单论语言来说,Java 的牛马是最多的。
    nkidgm
        28
    nkidgm  
       6 小时 47 分钟前
    很多人都没意识到,Java 最有价值的东西是 JVM.
    guanzhangzhang
        29
    guanzhangzhang  
       6 小时 39 分钟前
    @huijiewei 言论过于逆天
    zwzwzwzwzxt
        30
    zwzwzwzwzxt  
       2 小时 49 分钟前
    @lysShub #26 cosmopolitan 项目了解一下。真·一次编译到处运行 /doge
    aleviosa
        31
    aleviosa  
       1 小时 4 分钟前
    JS 和 Python 甚至不需要(开发者自己)编译也能到处运行,开发效率还更高,相比之下 Java 的优势是生态成熟和码农池子大,当然这也是场景和区域限定。国外那种 native app 还不如网站功能齐全,缺乏巨无霸 app ,到处都是 web 服务的地方,JS 的应用生态和码农池子更大。现在最热的 AI ,赛博炼丹的又都是 Python 。现在各大 LLM 写代码训练得成熟的不是 JS 就是 Python ,日后马太效应还会更来更严重……
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   873 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 21:29 · PVG 05:29 · LAX 14:29 · JFK 17:29
    ♥ Do have faith in what you're doing.