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

请教 Java 运行问题

  •  
  •   lasuar · 2020-06-09 09:04:48 +08:00 · 2140 次点击
    这是一个创建于 1632 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我了解到的 Java 是可以像 Python 提前打包成 exe 文件的,从而做到运行时不需要解释器,而且二进制文件执行速度我想也是要快于解释执行的,那么为什么这不是一种常见操作呢,而是在运行时使用 Jvm,Python 也是通过 Python 解释器启动? 这其中的根本原因是什么呢?各位回复前也稍作思考一下,谢谢

    7 条回复    2020-06-10 06:58:19 +08:00
    CNife
        1
    CNife  
       2020-06-09 09:21:39 +08:00
    R 大在知乎回答过很多类似的问题,建议翻翻他的回答。
    为什么 JVM 不用 JIT 全程编译? - RednaxelaFX 的回答 - 知乎
    https://www.zhihu.com/question/37389356/answer/73820511
    lasuar
        2
    lasuar  
    OP
       2020-06-09 09:28:01 +08:00
    @CNife 感谢回复,但是觉得他的回答很重呢--
    lasuar
        3
    lasuar  
    OP
       2020-06-09 09:34:37 +08:00
    我从网上一些资料上查到简明的解释是:
    直接打包 Java 或 Python 代码到 exe 文件,其实没能改变什么,得到的 exe 文件大小会非常大(相对于编写的源代码),因为它把语言的解释器部分也给打包进去了,最终运行过程和通过解释器运行没有两样(速度没有多大提升),这样还打包 exe 就没什么益处了。
    lasuar
        4
    lasuar  
    OP
       2020-06-09 09:35:22 +08:00
    @lasuar 不知这个解释有没有问题,还请高手回答~~
    woscaizi
        5
    woscaizi  
       2020-06-09 10:44:13 +08:00
    > 直接打包 Java 或 Python 代码到 exe 文件,其实没能改变什么,得到的 exe 文件大小会非常大(相对于编写的源代码),因为它把语言的解释器部分也给打包进去了,最终运行过程和通过解释器运行没有两样(速度没有多大提升),这样还打包 exe 就没什么益处了。

    这个解释是对的,相当于套了一层壳,只是将运行环境打包进去了。
    至于为什么还是需要这层环境,更深的原因就不知道了。
    pursuer
        6
    pursuer  
       2020-06-09 15:52:53 +08:00
    @lasuar 目前广泛使用的 Jvm,hotspot 并不是解释执行的,分发二进制不是常规操作的原因主要是系统架构及 ABI 不同,就需要针对 windows,linux,x86,x86_64,arm 等等一大堆的平台生成二进制
    lasuar
        7
    lasuar  
    OP
       2020-06-10 06:58:19 +08:00
    @pursuer 这个我知道,其实不打包二进制也是可以的吧,只要使用支持相应架构的 Jvm 启动就可以了,Jvm 就是跨平台的核心。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3522 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:00 · PVG 19:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.