dob
← 全部笔记

· 语言

编译、解释、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 改组。