请教 Java 运行问题

2020-06-09 09:04:48 +08:00
 lasuar

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

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

这个解释是对的,相当于套了一层壳,只是将运行环境打包进去了。
至于为什么还是需要这层环境,更深的原因就不知道了。
pursuer
2020-06-09 15:52:53 +08:00
@lasuar 目前广泛使用的 Jvm,hotspot 并不是解释执行的,分发二进制不是常规操作的原因主要是系统架构及 ABI 不同,就需要针对 windows,linux,x86,x86_64,arm 等等一大堆的平台生成二进制
lasuar
2020-06-10 06:58:19 +08:00
@pursuer 这个我知道,其实不打包二进制也是可以的吧,只要使用支持相应架构的 Jvm 启动就可以了,Jvm 就是跨平台的核心。

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

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

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

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

© 2021 V2EX