蚂蚁又开源了一个顶级Java项目!
大家好,我是Java1234_小锋老师。
前言:Java 圈又来了一位"筋斗云"选手
如果你平时写 Java,大概率听过 HotSpot 里的 C1、C2 编译器,或者关注过 GraalVM 这类新一代方案。就在最近,蚂蚁集团又往 Java 生态里扔了一颗"重磅炸弹"——正式开源了全新的 JVM 即时编译器Jeandle(筋斗云)。
名字起得挺有意思。"筋斗云"嘛,就是想让 JVM 跑得更快、更轻盈,像孙悟空踩着云一样,一翻十万八千里。
项目地址:
- JDK 部分:https://github.com/jeandle/jeandle-jdk
- LLVM 部分:https://github.com/jeandle/jeandle-llvm
目前两个仓库加起来已经收获了不少 Star,社区讨论也在逐渐升温。不过需要提前说一句:项目还在早期阶段,功能在持续完善中,但方向已经非常清晰了。
Jeandle 到底是什么?
一句话概括:
Jeandle 是一个基于 OpenJDK HotSpot 的全新 JIT(即时)编译器,底层借助 LLVM 来做代码优化和机器码生成。
我们平时写的 Java 代码,JVM 并不是一股脑全编译成机器码。它会先解释执行,等发现某段代码被频繁调用,再交给 JIT 编译器"加急处理",翻译成 CPU 能直接跑的二进制指令。这个过程直接决定了 Java 应用的运行速度。
Jeandle 干的就是这件事——只不过它选择了一条不太一样的路:把 LLVM 这套成熟的编译器基础设施,搬进 JVM 里来用。
为什么要把 LLVM 搬进 JVM?
先说说 LLVM 是什么。
你可以把它理解成一个**“编译器工具箱”**——模块化设计、优化能力强、后端支持丰富,C/C++、Rust 等语言背后都有它的身影。全球很多编译器项目都在用它,生态相当成熟。
那 JVM 自带的 C2 编译器不好吗?不是不好,C2 经过多年打磨,非常稳定。但 Java 的应用场景一直在变:微服务、大数据、AI 推理……对峰值性能和跨平台适配的要求越来越高。GraalVM 走了一条基于 Java 实现编译器的路线,而 Jeandle 则选择了另一条——直接站在 LLVM 的肩膀上。
这样做的好处很直观:
- 优化能力:LLVM 积累了大量成熟的优化 Pass,可以直接拿来用
- 跨架构支持:x86、ARM、RISC-V 等架构都有成熟后端,扩展新平台更方便
- 生态复用:LLVM 社区的工具链、调试手段、最佳实践,都能为 Jeandle 所用
当然,把两个复杂系统"焊"在一起,难度也不小——后面会聊到。
工作原理一览
Jeandle 在运行时的大致流程如下。官方文档里描述得很清楚,我用一张流程图帮你串起来:
具体步骤:
- 编译线程从任务队列里取出一个方法,开始编译
- 抽象解释器把 Java 字节码翻译成 LLVM 中间表示(IR)
- 定制优化器对 IR 做优化——既有 LLVM 标准优化,也有针对 Java 特性的定制 Pass(比如逃逸分析、类分析)
- LLVM 后端生成目标平台的机器码
- 生成的代码经过解析和重定位,放进 JVM 的Code Cache,等待执行
另外值得一提的是垃圾回收(GC)。JVM 的 GC 和编译器是紧密配合的,Jeandle 通过 LLVM 的Statepoint机制来支持 HotSpot 的 GC,保证编译后的代码在内存管理上不会"掉链子"。
两个仓库,分工明确
Jeandle 的代码拆成了两个独立仓库,各自负责一块:
| 仓库 | 地址 | 职责 |
|---|---|---|
| jeandle-jdk | github.com/jeandle/jeandle-jdk | 基于 OpenJDK 改造,包含 JIT 编译器前端、与 JVM 的集成、文档和构建脚本 |
| jeandle-llvm | github.com/jeandle/jeandle-llvm | 基于 LLVM 改造,负责 IR 优化、代码生成等后端工作 |
构建时需要先编译 jeandle-llvm,再编译 jeandle-jdk,并在配置时通过--with-jeandle-llvm=指定 LLVM 的安装路径。官方还提供了 Dockerfile,不想在本地折腾依赖的话,可以直接用容器来构建。
和 C2、Graal 比,它有什么不同?
Java 世界里不缺 JIT 编译器,大家最熟悉的可能是这几个:
| 编译器 | 特点 | 定位 |
|---|---|---|
| C1 / C2 | HotSpot 原生,久经考验 | 稳定、成熟,是 Java 性能的"基本盘" |
| GraalVM | 用 Java 写编译器,生态活跃 | 多语言、AOT 编译等场景表现突出 |
| Jeandle | 基于 LLVM,借力成熟编译器基础设施 | 追求更强的优化能力和更广的架构支持 |
Jeandle 目前支持Linux x86和Linux AArch64,RISC-V的支持也在推进中。得益于 LLVM 的后端生态,未来扩展到更多平台也有先天优势。
需要强调的是:Jeandle 目前还在快速迭代,不要指望它现在就全面替代 C2。但如果你对 JVM 底层、编译器技术感兴趣,或者想在特定场景下探索性能上限,它绝对值得持续关注。
怎么上手体验?
官方文档写得很详细,这里只列一个最简流程,帮你有个概念:
# 1. 克隆并编译 jeandle-llvmgitclone https://github.com/jeandle/jeandle-llvm.gitcdjeandle-llvm&&mkdirbuild&&cdbuild cmake-G"Unix Makefiles"\-DLLVM_TARGETS_TO_BUILD=X86\-DCMAKE_BUILD_TYPE=Release\-DCMAKE_INSTALL_PREFIX=/home/jeandle-llvm-install\-DLLVM_BUILD_LLVM_DYLIB=On\-DLLVM_DYLIB_COMPONENTS=all../llvm cmake--build.--targetinstall--parallel# 2. 克隆并编译 jeandle-jdkgitclone https://github.com/jeandle/jeandle-jdk.gitcdjeandle-jdkbashconfigure\--with-boot-jdk=/usr/local/java-21-openjdk-amd64/\--with-debug-level=release\--with-jeandle-llvm=/home/jeandle-llvm-installmakeimages编译完成后,JDK 会出现在build/linux-x86_64-server-release/images/jdk/目录下。
Jeandle 编译器默认开启。如果想关掉,加 JVM 参数-XX:-UseJeandleCompiler即可。想指定编译某个方法,可以用:
java-XX:-TieredCompilation-Xcomp\-XX:CompileCommand=compileonly,Main::fibonacci\Main写在最后
Jeandle 的出现,说明蚂蚁集团在 JVM 底层技术上又迈出了一步。把 LLVM 引入 Java 编译链路,这条路不新(历史上也有人尝试过),但能把工程做到开源、可构建、有文档、有社区,本身就是一件不容易的事。
对于普通开发者来说,短期内你不需要急着迁移。但对于关注 Java 性能、编译器技术、或者多架构部署的同学来说,Jeandle 是一个值得放进收藏夹的项目。
Java 已经走了近三十年,生态依然活跃。每一次底层创新,最终都会惠及每一个System.out.println。筋斗云已经起风了,不妨去看看它飞多高。
