· 语言
编译、解释、JIT:代码变成 CPU 指令的三条路
源代码、字节码、机器码。C 走 AOT,Java 走 JIT,CPython 始终解释。附 Linux chmod 速查。
代码的三种形态
- 源代码:人写的。
.java.py.c - 字节码:给虚拟机的中间态,跨平台,但不能直接跑。
.class.pyc - 机器码:CPU 指令。跟架构绑定,不跨平台,但最快
三条路
C: 源码 ──── AOT ────→ 机器码 ──→ CPU
Java: 源码 ──编译──→ 字节码 ── JIT ──→ 机器码 ──→ CPU(越跑越快)
Python: 源码 ──编译──→ 字节码 ── 解释 ──→ CPU(始终这个速度)
JIT 和 AOT 差在「什么时候」
两者都在做「字节码 → 机器码」,区别是时机。
AOT(Ahead Of Time):运行前就编好。C、Go 这条路。
JIT(Just In Time):跑起来再编热点。Java 刚启动时冷代码走解释;发现频繁调用的函数,编译成机器码,下次直接跑。所以 Java 会越跑越快。现代 JVM 里大部分热点最后都是机器码。
| 语言 | 字节码 | JIT | 特点 |
|---|---|---|---|
| C | 无 | 无 | 纯 AOT,快,跨平台差 |
| Java | .class | 有 | 先解释后编译,越跑越快 |
| CPython | .pyc | 无 | 字节码 + 解释,标准实现没有 JIT |
补充:PyPy、Numba 给 Python 加了 JIT。GraalVM Native Image 能让 Java 走 AOT,代价是丢掉运行时的 JIT 优化。
顺手记:Linux 文件权限
chmod a+x file # 所有人加执行
chmod 755 file # rwxr-xr-x
chmod 644 file # rw-r--r--
三位数对应三个角色:主人 / 同组 / 其他人。数字是 r=4、w=2、x=1 的加和。
| 数值 | 含义 | 常见用途 |
|---|---|---|
| 755 | rwxr-xr-x | 脚本、程序 |
| 644 | rw-r–r– | 普通文件 |
| 700 | rwx—— | 只有自己能跑的脚本 |
chown user:group file 改所有者,chgrp group file 改组。