:迫于之前发的节点曝光量太少,重新发一贴。
我了解到的 Java 是可以像 Python 提前打包成 exe 文件的,从而做到运行时不需要解释器,而且二进制文件执行速度我想也是要快于解释执行的,那么为什么这不是一种常见操作呢,而是在运行时使用 Jvm,Python 也是通过 Python 解释器启动? 这其中的根本原因是什么呢?
附:我从网上一些资料上查到简明的解释是: 直接打包 Java 或 Python 代码到 exe 文件,其实没能改变什么,得到的 exe 文件大小会非常大(相对于编写的源代码),因为它把语言的解释器部分也给打包进去了,最终运行过程和通过解释器运行没有两样(速度没有多大提升),这样还打包 exe 就没什么益处了。
也请各位回复前也稍作思考一下,谢谢~
1
autoname 2020-06-10 11:00:50 +08:00
|
2
cheng6563 2020-06-10 11:07:18 +08:00 via Android
Java 可以静态编译
|
3
senninha 2020-06-10 15:05:48 +08:00
非码农朋友让你帮忙写个小工具,丢个 jar 方便,还是直接丢一个 exe 方便呢?
|
4
hantsy 2020-06-10 15:10:45 +08:00
可以编译成机器内码。
比如,https://quarkus.io/blog/native-command-mode-tools/ Quarkus 最初可能都是关注在 Web 开发,现在 Command Mode 支持后,可以直接借助它编译成 Graavl 内码。 |
5
monkeyWie 2020-06-10 15:12:58 +08:00 1
一般来说 java 打成 exe 不是真正意义上的二进制文件执行,而是一个 exe 壳,里面还是有 jre,用 jre 来运行的 java,所以体积会非常大。
现在 oracle 有一个叫 GraalVM 的东西,支持 AOT 编译,这才是真正的静态编译,可以试试看: https://www.graalvm.org/getting-started/#native-images |
8
lqw3030 2020-06-10 20:47:28 +08:00 via iPhone
我都把 jdk 打给朋友,百来兆,让 java 在朋友电脑上发光发热😂
|
9
penguinWWY 2020-06-11 01:43:40 +08:00
SubstrateVM
一般 java 的 AOT 都是为了降低启动时间,而且打出来的 binary 会非常大 |
10
fancy2020 2020-06-11 07:27:03 +08:00 via iPhone
会损失了跨平台的特性吧
|
11
lasuar OP @fanchangyong 运行环境( jre 、jdk )也会打包进去,所以跨平台没有问题,主要的问题是即使代码打包 exe 也是包含了解释器的,整个运行速率没有提高,就如同标题所说,想来 Python 也是一样的原理,我的问题已经有答案了。
|
12
albertofwb 2020-06-11 08:57:29 +08:00
java python 这两种语言从设计上就是通过虚拟机(解释器)运行的 所谓的编译,就是将代码翻译为解释器可以识别的格式(字节码)
因此,所有的针对这两种语言的打包,也都是围绕着解释器展开的 |
13
qwerthhusn 2020-06-11 09:28:02 +08:00
不知道现在比较火的 GraalVM 能不能达到效
|